|
@@ -4,7 +4,7 @@ import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.backendsys.exception.CustException;
|
|
|
import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
|
|
|
-import com.backendsys.modules.common.utils.FilenameUtil;
|
|
|
+import com.backendsys.modules.common.utils.CommonUtil;
|
|
|
import com.backendsys.modules.sdk.tencent.cos.entity.Progress;
|
|
|
import com.backendsys.modules.sdk.tencent.cos.entity.ProgressData;
|
|
|
import com.backendsys.modules.sdk.tencent.cos.service.TencentCosService;
|
|
@@ -14,11 +14,10 @@ import com.qcloud.cos.COSClient;
|
|
|
import com.qcloud.cos.ClientConfig;
|
|
|
import com.qcloud.cos.auth.BasicCOSCredentials;
|
|
|
import com.qcloud.cos.auth.COSCredentials;
|
|
|
+import com.qcloud.cos.exception.CosClientException;
|
|
|
+import com.qcloud.cos.exception.CosServiceException;
|
|
|
import com.qcloud.cos.http.HttpMethodName;
|
|
|
-import com.qcloud.cos.model.GeneratePresignedUrlRequest;
|
|
|
-import com.qcloud.cos.model.ObjectMetadata;
|
|
|
-import com.qcloud.cos.model.PutObjectRequest;
|
|
|
-import com.qcloud.cos.model.UploadResult;
|
|
|
+import com.qcloud.cos.model.*;
|
|
|
import com.qcloud.cos.region.Region;
|
|
|
import com.qcloud.cos.transfer.Transfer;
|
|
|
import com.qcloud.cos.transfer.TransferManager;
|
|
@@ -32,9 +31,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.*;
|
|
|
import java.net.URL;
|
|
|
-import java.net.URLEncoder;
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
+import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
|
|
|
// 图片处理概述
|
|
@@ -117,8 +115,8 @@ public class TencentCosServiceImpl implements TencentCosService {
|
|
|
COSClient cosClient = getClient();
|
|
|
try {
|
|
|
|
|
|
- // 如果不传 object_key,则默认使用临时文件夹 (/temp) + MD5文件名
|
|
|
- String filename = FilenameUtil.generateUUIDFilename(multipartFile);
|
|
|
+ // 如果不传 object_key,则默认使用临时文件夹 (/temp) + UUID文件名
|
|
|
+ String filename = CommonUtil.generateUUIDFilename(multipartFile);
|
|
|
if (StrUtil.isEmpty(object_key)) object_key = "temp/" + filename;
|
|
|
System.out.println("Upload object: " + object_key);
|
|
|
|
|
@@ -240,6 +238,7 @@ public class TencentCosServiceImpl implements TencentCosService {
|
|
|
cosClient.shutdown();
|
|
|
}
|
|
|
|
|
|
+ // [腾讯云COS] 获得临时图片地址
|
|
|
@Override
|
|
|
public URL generateUrl(String object_key, Integer minutes) {
|
|
|
// 生成临时访问的URL (15分钟)
|
|
@@ -251,4 +250,62 @@ public class TencentCosServiceImpl implements TencentCosService {
|
|
|
cosClient.shutdown();
|
|
|
return url;
|
|
|
}
|
|
|
+
|
|
|
+ // [腾讯云COS] 初始化分块上传
|
|
|
+ @Override
|
|
|
+ public InitiateMultipartUploadResult initiateMultipartUpload(MultipartFile multipartFile) {
|
|
|
+
|
|
|
+ if (multipartFile.isEmpty()) throw new CustException("file 文件不能为空");
|
|
|
+
|
|
|
+ COSClient cosClient = getClient();
|
|
|
+ try {
|
|
|
+
|
|
|
+ // 使用临时文件夹 (/temp) + UUID文件名
|
|
|
+ String filename = CommonUtil.generateUUIDFilename(multipartFile);
|
|
|
+ String object_key = "temp/" + filename;
|
|
|
+ System.out.println("initiateMultipartUpload object: " + object_key);
|
|
|
+
|
|
|
+ InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(BUCKET_NAME, object_key);
|
|
|
+ InitiateMultipartUploadResult initResult = cosClient.initiateMultipartUpload(request);
|
|
|
+ return initResult;
|
|
|
+
|
|
|
+ } catch (CosServiceException e) {
|
|
|
+ throw new CustException(e.getMessage());
|
|
|
+ } catch (CosClientException e) {
|
|
|
+ throw new CustException(e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (cosClient != null) cosClient.shutdown();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // [腾讯云COS] 查询已上传的分块
|
|
|
+ @Override
|
|
|
+ public PartListing listParts(String upload_id, String object_key) {
|
|
|
+
|
|
|
+ if (StrUtil.isEmpty(upload_id)) throw new CustException("upload_id 不能为空");
|
|
|
+ if (StrUtil.isEmpty(object_key)) throw new CustException("object_key 不能为空");
|
|
|
+
|
|
|
+ COSClient cosClient = getClient();
|
|
|
+ try {
|
|
|
+
|
|
|
+ // 用于保存已上传的分片信息
|
|
|
+ List<PartETag> partETags = new LinkedList<>();
|
|
|
+ PartListing partListing = null;
|
|
|
+ ListPartsRequest listPartsRequest = new ListPartsRequest(BUCKET_NAME, object_key, upload_id);
|
|
|
+
|
|
|
+ do {
|
|
|
+ partListing = cosClient.listParts(listPartsRequest);
|
|
|
+ for (PartSummary partSummary : partListing.getParts()) {
|
|
|
+ partETags.add(new PartETag(partSummary.getPartNumber(), partSummary.getETag()));
|
|
|
+ System.out.println("list multipart upload parts, partNum:" + partSummary.getPartNumber() + ", etag:" + partSummary.getETag());
|
|
|
+ }
|
|
|
+ return partListing;
|
|
|
+ } while (partListing.isTruncated());
|
|
|
+
|
|
|
+ } finally {
|
|
|
+ if (cosClient != null) cosClient.shutdown();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|