删除品牌

This commit is contained in:
super
2026-03-27 21:32:00 +08:00
parent ea212c8931
commit 5dd7a92cf5
22 changed files with 675 additions and 214 deletions
@@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.Date;
import java.util.UUID;
@@ -17,13 +18,13 @@ public class OssStorageService {
private final OssProperties ossProperties;
/**
* 上传结果文件到 OSS,返回 objectKey(非预签名 URL)。
* 调用方应存储 objectKey,下载时通过 generateFreshDownloadUrl 按需生成链接。
*/
public String uploadResultFile(File file, String moduleType) {
String objectKey = String.format("result/%s/%s/%s", moduleType.toLowerCase(), UUID.randomUUID(), file.getName());
OSS ossClient = new OSSClientBuilder().build(
"https://" + ossProperties.getEndpoint(),
ossProperties.getAccessKeyId(),
ossProperties.getAccessKeySecret()
);
OSS ossClient = buildClient();
try {
ossClient.putObject(ossProperties.getBucket(), objectKey, file);
return objectKey;
@@ -32,12 +33,11 @@ public class OssStorageService {
}
}
/**
* 根据 objectKey 生成预签名下载 URL(1小时有效)。
*/
public String generateDownloadUrl(String objectKey) {
OSS ossClient = new OSSClientBuilder().build(
"https://" + ossProperties.getEndpoint(),
ossProperties.getAccessKeyId(),
ossProperties.getAccessKeySecret()
);
OSS ossClient = buildClient();
try {
Date expiration = new Date(System.currentTimeMillis() + 3600_000L);
URL url = ossClient.generatePresignedUrl(ossProperties.getBucket(), objectKey, expiration);
@@ -46,4 +46,52 @@ public class OssStorageService {
ossClient.shutdown();
}
}
/**
* 获取公开(无签名)URL,格式:https://{bucket}.{endpoint}/{objectKey}
*/
public String getPublicUrl(String objectKey) {
if (objectKey == null || objectKey.isBlank()) {
return null;
}
return String.format("https://%s.%s/%s", ossProperties.getBucket(), ossProperties.getEndpoint(), objectKey);
}
/**
* 从存储值中解析出 objectKey,兼容两种格式:
* - 旧格式:完整预签名 URLhttps://bucket.endpoint/objectKey?Expires=...
* - 新格式:直接是 objectKey(如 result/dedupe/uuid/file.xlsx
*/
public String resolveObjectKey(String value) {
if (value == null || value.isBlank()) {
return value;
}
try {
if (value.startsWith("http://") || value.startsWith("https://")) {
String path = URI.create(value).getPath();
return path.startsWith("/") ? path.substring(1) : path;
}
} catch (Exception ignored) {
}
return value;
}
/**
* 根据存储值(objectKey 或旧格式预签名 URL)生成新鲜的预签名下载 URL。
* 供各模块 listHistory 使用,每次按需生成,避免旧 URL 1小时后过期。
*/
public String generateFreshDownloadUrl(String value) {
if (value == null || value.isBlank()) {
return null;
}
return generateDownloadUrl(resolveObjectKey(value));
}
private OSS buildClient() {
return new OSSClientBuilder().build(
"https://" + ossProperties.getEndpoint(),
ossProperties.getAccessKeyId(),
ossProperties.getAccessKeySecret()
);
}
}