feat: 新增虚拟支付订单与网盘链接检测功能
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package com.ruoyi.app.service;
|
||||
|
||||
import com.ruoyi.app.domain.AppBlogArticle;
|
||||
import com.ruoyi.app.domain.AppResource;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Builds CDN image variants without persisting derived URLs in the database.
|
||||
*/
|
||||
@Component
|
||||
public class ImageUrlService
|
||||
{
|
||||
@Value("${app.image.cdn-domain:https://img.yidaima.cn}")
|
||||
private String cdnDomain;
|
||||
|
||||
@Value("${app.image.article-card-operation:imageView2/1/w/600/h/375/format/webp/q/75/ignore-error/1}")
|
||||
private String articleCardOperation;
|
||||
|
||||
@Value("${app.image.resource-card-operation:imageView2/1/w/500/h/400/format/webp/q/75/ignore-error/1}")
|
||||
private String resourceCardOperation;
|
||||
|
||||
public void decorateArticles(List<AppBlogArticle> articles)
|
||||
{
|
||||
if (articles == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (AppBlogArticle article : articles)
|
||||
{
|
||||
decorateArticle(article);
|
||||
}
|
||||
}
|
||||
|
||||
public AppBlogArticle decorateArticle(AppBlogArticle article)
|
||||
{
|
||||
if (article == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
String originalUrl = normalizeOriginalUrl(article.getShowImg());
|
||||
article.setShowImg(originalUrl);
|
||||
article.setShowImgThumb(buildThumbnailUrl(originalUrl, articleCardOperation));
|
||||
decorateResource(article.getAppResource());
|
||||
return article;
|
||||
}
|
||||
|
||||
public void decorateResources(List<AppResource> resources)
|
||||
{
|
||||
if (resources == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (AppResource resource : resources)
|
||||
{
|
||||
decorateResource(resource);
|
||||
}
|
||||
}
|
||||
|
||||
public AppResource decorateResource(AppResource resource)
|
||||
{
|
||||
if (resource == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
String originalUrl = normalizeOriginalUrl(resource.getShowImg());
|
||||
resource.setShowImg(originalUrl);
|
||||
resource.setShowImgThumb(buildThumbnailUrl(originalUrl, resourceCardOperation));
|
||||
return resource;
|
||||
}
|
||||
|
||||
public String normalizeOriginalUrl(String originalUrl)
|
||||
{
|
||||
if (originalUrl == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
String url = originalUrl.trim();
|
||||
String host = cdnHost();
|
||||
String httpPrefix = "http://" + host + "/";
|
||||
if (url.startsWith(httpPrefix))
|
||||
{
|
||||
return "https://" + url.substring("http://".length());
|
||||
}
|
||||
String protocolRelativePrefix = "//" + host + "/";
|
||||
if (url.startsWith(protocolRelativePrefix))
|
||||
{
|
||||
return "https:" + url;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
private String buildThumbnailUrl(String originalUrl, String operation)
|
||||
{
|
||||
if (originalUrl == null || originalUrl.isEmpty())
|
||||
{
|
||||
return originalUrl;
|
||||
}
|
||||
String cdnPrefix = "https://" + cdnHost() + "/";
|
||||
if (!originalUrl.startsWith(cdnPrefix))
|
||||
{
|
||||
return originalUrl;
|
||||
}
|
||||
// Avoid corrupting signed or already processed URLs.
|
||||
if (originalUrl.indexOf('?') >= 0)
|
||||
{
|
||||
return originalUrl;
|
||||
}
|
||||
return originalUrl + "?" + operation;
|
||||
}
|
||||
|
||||
private String cdnHost()
|
||||
{
|
||||
String value = cdnDomain == null ? "img.yidaima.cn" : cdnDomain.trim();
|
||||
if (value.startsWith("https://"))
|
||||
{
|
||||
value = value.substring("https://".length());
|
||||
}
|
||||
else if (value.startsWith("http://"))
|
||||
{
|
||||
value = value.substring("http://".length());
|
||||
}
|
||||
while (value.endsWith("/"))
|
||||
{
|
||||
value = value.substring(0, value.length() - 1);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user