From e8acfac09190e29b4aea8cfc41d43dac099603a4 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期五, 17 一月 2025 18:03:00 +0800
Subject: [PATCH] fix 修复 文件下载 设置content-length无效问题
---
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java | 9 +++++++--
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java | 3 +--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
index 59c599b..e3b20dd 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
@@ -32,6 +32,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
+import java.util.function.Consumer;
/**
* S3 瀛樺偍鍗忚 鎵�鏈夊吋瀹筍3鍗忚鐨勪簯鍘傚晢鍧囨敮鎸�
@@ -239,10 +240,11 @@
*
* @param key 鏂囦欢鍦� Amazon S3 涓殑瀵硅薄閿�
* @param out 杈撳嚭娴�
+ * @param consumer 鑷畾涔夊鐞嗛�昏緫
* @return 杈撳嚭娴佷腑鍐欏叆鐨勫瓧鑺傛暟锛堥暱搴︼級
* @throws OssException 濡傛灉涓嬭浇澶辫触锛屾姏鍑鸿嚜瀹氫箟寮傚父
*/
- public long download(String key, OutputStream out) {
+ public void download(String key, OutputStream out, Consumer<Long> consumer) {
try {
// 鏋勫缓涓嬭浇璇锋眰
DownloadRequest<ResponseInputStream<GetObjectResponse>> downloadRequest = DownloadRequest.builder()
@@ -258,7 +260,10 @@
Download<ResponseInputStream<GetObjectResponse>> responseFuture = transferManager.download(downloadRequest);
// 杈撳嚭鍒版祦涓�
try (ResponseInputStream<GetObjectResponse> responseStream = responseFuture.completionFuture().join().result()) { // auto-closeable stream
- return responseStream.transferTo(out); // 闃诲璋冪敤绾跨▼ blocks the calling thread
+ if (consumer != null) {
+ consumer.accept(responseStream.response().contentLength());
+ }
+ responseStream.transferTo(out); // 闃诲璋冪敤绾跨▼ blocks the calling thread
}
} catch (Exception e) {
throw new OssException("鏂囦欢涓嬭浇澶辫触锛岄敊璇俊鎭�:[" + e.getMessage() + "]");
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
index f745a99..c2eb08c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -178,8 +178,7 @@
FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
OssClient storage = OssFactory.instance(sysOss.getService());
- long contentLength = storage.download(sysOss.getFileName(), response.getOutputStream());
- response.setContentLengthLong(contentLength);
+ storage.download(sysOss.getFileName(), response.getOutputStream(), response::setContentLengthLong);
}
/**
--
Gitblit v1.9.3