|
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.api.R;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.persagy.dmp.common.constant.ResponseCode;
|
|
|
+import com.persagy.dmp.common.context.AppContext;
|
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
|
import com.persagy.dmp.common.model.response.CommonResult;
|
|
|
import com.persagy.dmp.common.utils.ResultHelper;
|
|
@@ -22,6 +23,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -56,6 +59,8 @@ public class FileUploadServiceImpl extends ServiceImpl<FileMapper, FileInfo> imp
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public List<FileInfo> initChunkUpload(FileRequestData requestData) {
|
|
|
+ String groupCode = AppContext.getContext().getGroupCode();
|
|
|
+ requestData.setGroupCode(groupCode);
|
|
|
if (StrUtil.isBlank(requestData.getFileMd5())){
|
|
|
throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
|
|
|
}
|
|
@@ -92,6 +97,31 @@ public class FileUploadServiceImpl extends ServiceImpl<FileMapper, FileInfo> imp
|
|
|
// 4.第一次上传或已存在但没有上传过分片的
|
|
|
return firstInitChunkUploadInternal(requestData);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public FileInfo composeFile(FileRequestData requestData) {
|
|
|
+ //根据md5获取所有分片文件名称(minio的文件名称 = 文件path)
|
|
|
+ List<String> chunks = minioCommonService.listObjectNames("chunk",requestData.getFileMd5());
|
|
|
+ //自定义文件名称
|
|
|
+ String fileName = requestData.getFileName();
|
|
|
+ String suffix = fileName.substring(fileName.lastIndexOf("."));
|
|
|
+ DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
|
|
+ fileName = df.format(LocalDateTime.now()) + suffix;
|
|
|
+ //合并文件
|
|
|
+ if(minioCommonService.composeObject(requestData.getBucketName(),chunks,fileName)){
|
|
|
+ //获取文件访问外链(1小时过期)
|
|
|
+ String url = minioCommonService.getObjectUrl(requestData.getBucketName(),fileName,60);
|
|
|
+ //获取数据库里记录的文件信息,修改数据并返回文件信息
|
|
|
+ FileInfo fileInfo = queryFileInfosByFileMd5(requestData.getFileMd5());
|
|
|
+ fileInfo.setUploadStatus(UPLOAD_SUCCESS);
|
|
|
+ fileInfo.setFileName(fileName);
|
|
|
+ fileInfo.setFilePath(url);
|
|
|
+ this.updateById(fileInfo);
|
|
|
+ return fileInfo;
|
|
|
+ }
|
|
|
+ throw new BusinessException(ResponseCode.B0001.getCode(), "合并文件失败");
|
|
|
+ }
|
|
|
+
|
|
|
/***
|
|
|
* Description: 初次上传和已有文件信息但未上传任何分片的情况下则直接生成所有上传url
|
|
|
* @param requestData :
|
|
@@ -113,7 +143,7 @@ public class FileUploadServiceImpl extends ServiceImpl<FileMapper, FileInfo> imp
|
|
|
chunkUploadUrls.add(fileInfo);
|
|
|
}
|
|
|
//向数据库中记录该文件的上传信息
|
|
|
- FileInfo fileInfo = FileInfoCreator.of(requestData.getGroupCode(),requestData.getBusinessId(),
|
|
|
+ FileInfo fileInfo = FileInfoCreator.of(AppContext.getContext().getGroupCode(),requestData.getBusinessId(),
|
|
|
requestData.getBucketName(), requestData.getFileName());
|
|
|
fileInfo.setUploadStatus(UPLOAD_PART);
|
|
|
fileInfo.setFileMd5(requestData.getFileMd5());
|