diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/brand/service/BrandTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/brand/service/BrandTaskService.java index b6e66238..6ced901c 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/brand/service/BrandTaskService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/brand/service/BrandTaskService.java @@ -1065,9 +1065,9 @@ public class BrandTaskService { List> uploadFutures = new ArrayList<>(entries.size()); for (OutputEntry entry : entries) { uploadFutures.add(CompletableFuture.supplyAsync(() -> { - // 存储完整公开地址,下载时会自动通过 resolveObjectKey 提取 objectKey(见 OssStorageService.resolveObjectKey) + // 存储完整公开地址:result/ 前缀走 download-endpoint 独立下载域名,下载时可直接使用 String objectKey = ossStorageService.uploadResultFile(entry.resultFile(), MODULE_TYPE); - return ossStorageService.getPublicUrl(objectKey); + return ossStorageService.generateFreshDownloadUrl(objectKey); }, resultUploadExecutor)); } for (CompletableFuture future : uploadFutures) { @@ -1089,7 +1089,7 @@ public class BrandTaskService { File zipFile = packageAsZip(taskId, entries); String zipObjectKey = ossStorageService.uploadResultFile(zipFile, MODULE_TYPE); result.put("zip_object_key", zipObjectKey); - result.put("zip_url", ossStorageService.getPublicUrl(zipObjectKey)); + result.put("zip_url", ossStorageService.generateFreshDownloadUrl(zipObjectKey)); return result; } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/collectdata/service/CollectDataService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/collectdata/service/CollectDataService.java index 4c9496b6..9310d3ce 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/collectdata/service/CollectDataService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/collectdata/service/CollectDataService.java @@ -1593,8 +1593,8 @@ public class CollectDataService { } try { // bucket 对 result/ 前缀已开放公开读,使用无签名公开 URL,避免签名 1 小时过期后下载 403。 - // resolveObjectKey 兼容历史存量的旧格式(带签名的完整 URL),统一还原为纯 objectKey 再拼公开 URL。 - return ossStorageService.getPublicUrl(ossStorageService.resolveObjectKey(resultFileUrl)); + // result/ 前缀走 download-endpoint 独立下载域名(带宽/缓存分流),非 result/(如图片)仍走公开端点。 + return ossStorageService.generateFreshDownloadUrl(resultFileUrl); } catch (Exception ex) { log.warn("[collect-data] build public download url failed resultId={} err={}", row.getId(), ex.getMessage()); diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java index 75d7c710..75c4515d 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java @@ -1975,7 +1975,7 @@ public class DeleteBrandRunService { public String resolveTaskDownloadUrl(Long taskId) { FileResultEntity entity = findLatestSuccessfulResult(taskId); - return entity == null || entity.getResultFileUrl() == null ? null : ossStorageService.getPublicUrl(entity.getResultFileUrl()); + return entity == null || entity.getResultFileUrl() == null ? null : ossStorageService.generateFreshDownloadUrl(entity.getResultFileUrl()); } public String resolveTaskDownloadFilename(Long taskId) { @@ -1985,7 +1985,7 @@ public class DeleteBrandRunService { public String resolveResultDownloadUrl(Long resultId, Long userId) { FileResultEntity entity = findDownloadableResult(resultId, userId); - return entity == null || entity.getResultFileUrl() == null ? null : ossStorageService.getPublicUrl(entity.getResultFileUrl()); + return entity == null || entity.getResultFileUrl() == null ? null : ossStorageService.generateFreshDownloadUrl(entity.getResultFileUrl()); } public String resolveResultDownloadFilename(Long resultId, Long userId) { diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/file/service/oss/OssStorageService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/file/service/oss/OssStorageService.java index a3e538a2..b77fa248 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/file/service/oss/OssStorageService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/file/service/oss/OssStorageService.java @@ -54,7 +54,7 @@ public class OssStorageService { String objectKey = resultObjectKey(file, moduleType); String bucket = resolveBucket(moduleType); uploadFile(file, bucket, objectKey); - return new UploadedResult(objectKey, getPublicUrl(objectKey, bucket)); + return new UploadedResult(objectKey, generateFreshDownloadUrl(objectKey)); } public UploadedResult uploadPublicFileWithFreshDownloadUrl(File file, String moduleType, String originalFilename) { diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java index ce7abb0c..3fc1c1cd 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java @@ -5544,8 +5544,8 @@ public class SimilarAsinTaskService { } try { // bucket 对 result/ 前缀已开放公开读,使用无签名公开 URL,避免签名 1 小时过期后下载 403。 - // resolveObjectKey 兼容历史存量的旧格式(带签名的完整 URL),统一还原为纯 objectKey 再拼公开 URL。 - return ossStorageService.getPublicUrl(ossStorageService.resolveObjectKey(resultFileUrl)); + // result/ 前缀走 download-endpoint 独立下载域名(带宽/缓存分流),非 result/(如图片)仍走公开端点。 + return ossStorageService.generateFreshDownloadUrl(resultFileUrl); } catch (Exception ex) { log.warn("[similar-asin] build public download url failed resultId={} err={}", row.getId(), ex.getMessage());