|
@@ -2,21 +2,24 @@ package com.backendsys.modules.upload.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.io.file.FileNameUtil;
|
|
import cn.hutool.core.io.file.FileNameUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.crypto.digest.DigestUtil;
|
|
import cn.hutool.crypto.digest.DigestUtil;
|
|
|
|
+import com.backendsys.exception.CustException;
|
|
import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
|
|
import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
|
|
import com.backendsys.modules.sdk.tencent.cos.service.TencentCosService;
|
|
import com.backendsys.modules.sdk.tencent.cos.service.TencentCosService;
|
|
import com.backendsys.modules.upload.dao.SysUploadDao;
|
|
import com.backendsys.modules.upload.dao.SysUploadDao;
|
|
import com.backendsys.modules.upload.entity.SysUpload;
|
|
import com.backendsys.modules.upload.entity.SysUpload;
|
|
import com.backendsys.modules.upload.service.SysUploadMultipartService;
|
|
import com.backendsys.modules.upload.service.SysUploadMultipartService;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
-import com.qcloud.cos.model.InitiateMultipartUploadResult;
|
|
|
|
-import com.qcloud.cos.model.PartListing;
|
|
|
|
|
|
+import com.qcloud.cos.model.*;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.LinkedHashMap;
|
|
|
|
+import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
@Service
|
|
@Service
|
|
@@ -58,7 +61,6 @@ public class SysUploadMultipartServiceImpl implements SysUploadMultipartService
|
|
sysUploadEntity.setObject_key(object_key);
|
|
sysUploadEntity.setObject_key(object_key);
|
|
sysUploadDao.updateById(sysUploadEntity);
|
|
sysUploadDao.updateById(sysUploadEntity);
|
|
}
|
|
}
|
|
-
|
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
@@ -72,7 +74,28 @@ public class SysUploadMultipartServiceImpl implements SysUploadMultipartService
|
|
// 上传分块
|
|
// 上传分块
|
|
@Override
|
|
@Override
|
|
public Map<String, Object> uploadMultipart(MultipartFile multipartFile, String upload_id) {
|
|
public Map<String, Object> uploadMultipart(MultipartFile multipartFile, String upload_id) {
|
|
- return null;
|
|
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isEmpty(upload_id)) throw new CustException("upload_id 不能为空");
|
|
|
|
+
|
|
|
|
+ SysUpload sysUploadEntity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getUpload_id, upload_id));
|
|
|
|
+ if (sysUploadEntity == null) throw new CustException("upload_id 不存在");
|
|
|
|
+
|
|
|
|
+ String object_key = sysUploadEntity.getObject_key();
|
|
|
|
+
|
|
|
|
+ // 查询分块上传情况 (获得下次要上传的位置)
|
|
|
|
+ PartListing partListing = listParts(upload_id, object_key);
|
|
|
|
+ Integer partNumberMarker = partListing.getPartNumberMarker() + 1;
|
|
|
|
+
|
|
|
|
+ UploadPartResult partResult = tencentCosService.uploadPart(multipartFile, upload_id, object_key, partNumberMarker);
|
|
|
|
+ System.out.println("partResult:");
|
|
|
|
+ System.out.println(partResult);
|
|
|
|
+
|
|
|
|
+ Map<String, Object> resp = new LinkedHashMap<>();
|
|
|
|
+ resp.put("upload_id", upload_id);
|
|
|
|
+ resp.put("object_key", object_key);
|
|
|
|
+ resp.put("part_number", partNumberMarker);
|
|
|
|
+ resp.put("part_etag", partResult.getPartETag());
|
|
|
|
+ return resp;
|
|
}
|
|
}
|
|
|
|
|
|
// 查询分块上传情况
|
|
// 查询分块上传情况
|
|
@@ -81,4 +104,26 @@ public class SysUploadMultipartServiceImpl implements SysUploadMultipartService
|
|
return tencentCosService.listParts(upload_id, object_key);
|
|
return tencentCosService.listParts(upload_id, object_key);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 完成分块上传
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, Object> completeMultipartUpload(String upload_id) {
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isEmpty(upload_id)) throw new CustException("upload_id 不能为空");
|
|
|
|
+
|
|
|
|
+ SysUpload sysUploadEntity = sysUploadDao.selectOne(new LambdaQueryWrapper<SysUpload>().eq(SysUpload::getUpload_id, upload_id));
|
|
|
|
+ if (sysUploadEntity == null) throw new CustException("upload_id 不存在");
|
|
|
|
+
|
|
|
|
+ String object_key = sysUploadEntity.getObject_key();
|
|
|
|
+
|
|
|
|
+// // 查询分块上传情况 (获得下次要上传的位置)
|
|
|
|
+// PartListing partListing = listParts(upload_id, object_key);
|
|
|
|
+// List<PartSummary> partSummaryList = partListing.getParts();
|
|
|
|
+//
|
|
|
|
+// List<PartETag> partETags = new ArrayList<>();
|
|
|
|
+//
|
|
|
|
+// tencentCosService.completeMultipartUpload(upload_id, object_key, partETags);
|
|
|
|
+
|
|
|
|
+ return Map.of("upload_id", upload_id);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|