✨ 支持应收账单导出通过 OSS 签名链接下载
This commit is contained in:
@@ -1,18 +1,25 @@
|
||||
package com.bms.common.utils.file;
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Date;
|
||||
|
||||
import com.aliyun.oss.ClientBuilderConfiguration;
|
||||
import com.aliyun.oss.HttpMethod;
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.CannedAccessControlList;
|
||||
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
|
||||
import com.aliyun.oss.model.OSSObject;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import com.aliyun.oss.model.PutObjectRequest;
|
||||
import com.aliyun.oss.model.ResponseHeaderOverrides;
|
||||
import com.bms.common.config.OssProperties;
|
||||
import com.bms.common.exception.ServiceException;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -67,6 +74,28 @@ public class OssStorage {
|
||||
}
|
||||
}
|
||||
|
||||
/** 为私有 OSS 对象生成带附件文件名的限时下载链接。 */
|
||||
public String generatePresignedDownloadUrl(String storageKey, String fileName, Date expiresAt) {
|
||||
String objectKey = resolveObjectKey(storageKey);
|
||||
OSS client = createClient();
|
||||
try {
|
||||
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(
|
||||
properties.getBucket(), objectKey, HttpMethod.GET);
|
||||
request.setExpiration(expiresAt);
|
||||
|
||||
String downloadName = StringUtils.hasText(fileName) ? fileName : "账单导出.xlsx";
|
||||
String encodedFileName = URLEncoder.encode(downloadName, StandardCharsets.UTF_8).replace("+", "%20");
|
||||
ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides();
|
||||
responseHeaders.setContentDisposition("attachment; filename=" + encodedFileName
|
||||
+ ";filename*=utf-8''" + encodedFileName);
|
||||
request.setResponseHeaders(responseHeaders);
|
||||
URL signedUrl = client.generatePresignedUrl(request);
|
||||
return signedUrl.toExternalForm();
|
||||
} finally {
|
||||
client.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public void delete(String storageKey) {
|
||||
String objectKey = resolveObjectKey(storageKey);
|
||||
OSS client = createClient();
|
||||
|
||||
Reference in New Issue
Block a user