upadte 优化OSS文件下载代码

This commit is contained in:
秋辞未寒 2025-08-12 16:37:06 +08:00
parent ad6b3d4b3f
commit 8f3a1b589e

View File

@ -2,6 +2,7 @@ package org.dromara.common.oss.core;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
@ -41,6 +42,7 @@ import java.util.function.Consumer;
* *
* @author AprilWind * @author AprilWind
*/ */
@Slf4j
public class OssClient { public class OssClient {
/** /**
@ -279,19 +281,19 @@ public class OssClient {
// 构建写出订阅器对象 // 构建写出订阅器对象
return out -> { return out -> {
// 注意此处不需要显式关闭 channel channel 会在 out 关闭时自动关闭 // 创建可写入的字节通道
WritableByteChannel channel = Channels.newChannel(out); try(WritableByteChannel channel = Channels.newChannel(out)){
// 订阅数据 // 订阅数据
publisher.subscribe(byteBuffer -> { publisher.subscribe(byteBuffer -> {
try {
while (byteBuffer.hasRemaining()) { while (byteBuffer.hasRemaining()) {
try {
channel.write(byteBuffer); channel.write(byteBuffer);
}
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
}
}).join(); }).join();
}
}; };
} catch (Exception e) { } catch (Exception e) {
throw new OssException("文件下载失败,错误信息:[" + e.getMessage() + "]"); throw new OssException("文件下载失败,错误信息:[" + e.getMessage() + "]");