|
@@ -4,11 +4,14 @@ import api.common.pojo.common.ResponseBodyVO;
|
|
import api.common.pojo.constants.DictConstants;
|
|
import api.common.pojo.constants.DictConstants;
|
|
import api.common.pojo.param.MinioParameter;
|
|
import api.common.pojo.param.MinioParameter;
|
|
import api.common.util.FileUtil;
|
|
import api.common.util.FileUtil;
|
|
|
|
+import api.common.util.ObjectUtil;
|
|
import api.common.util.TimeUtil;
|
|
import api.common.util.TimeUtil;
|
|
|
|
+import com.css.simulation.resource.common.configuration.minio.SubMinioClient;
|
|
import com.css.simulation.resource.common.util.MinioUtil;
|
|
import com.css.simulation.resource.common.util.MinioUtil;
|
|
-import io.minio.MinioClient;
|
|
|
|
|
|
+import io.minio.*;
|
|
import io.minio.errors.*;
|
|
import io.minio.errors.*;
|
|
import io.minio.http.Method;
|
|
import io.minio.http.Method;
|
|
|
|
+import io.minio.messages.Part;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.http.MediaType;
|
|
@@ -23,16 +26,14 @@ import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InputStream;
|
|
import java.security.InvalidKeyException;
|
|
import java.security.InvalidKeyException;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.security.NoSuchAlgorithmException;
|
|
-import java.util.Date;
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
@RestController
|
|
@RestController
|
|
@RequestMapping("/minio")
|
|
@RequestMapping("/minio")
|
|
public class MinioController {
|
|
public class MinioController {
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
- private MinioClient minioClient;
|
|
|
|
|
|
+ private SubMinioClient minioClient;
|
|
|
|
|
|
@Value("${minio.bucket-name}")
|
|
@Value("${minio.bucket-name}")
|
|
private String bucketName;
|
|
private String bucketName;
|
|
@@ -133,4 +134,60 @@ public class MinioController {
|
|
FileUtil.downloadForHttp(fileName, inputStream, response, 1024);
|
|
FileUtil.downloadForHttp(fileName, inputStream, response, 1024);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @RequestMapping("/createMultipartUpload")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public ResponseBodyVO createMultipartUpload(@RequestBody Map<String,String> paramMap) throws Exception {
|
|
|
|
+ String objectName = paramMap.get("objectName");
|
|
|
|
+ String chunkSize = paramMap.get("chunkSize");
|
|
|
|
+ String type = paramMap.get("type");
|
|
|
|
+ if(ObjectUtil.isNull(objectName) || ObjectUtil.isNull(chunkSize) || ObjectUtil.isNull(type)){
|
|
|
|
+ return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"请求参数缺失");
|
|
|
|
+ }
|
|
|
|
+ Integer nowTime = TimeUtil.getRq(new Date(), 0);
|
|
|
|
+ if (type.equals(DictConstants.ALGORITHM_FILE)) {
|
|
|
|
+ objectName = "algorithm/" + nowTime + "/" + objectName;
|
|
|
|
+ }
|
|
|
|
+ Map<String,Object> result = new HashMap<>();//结果数据
|
|
|
|
+ CreateMultipartUploadResponse multipartUpload = minioClient.createMultipartUpload(bucketName, null, objectName, null, null);
|
|
|
|
+ String uploadId = multipartUpload.result().uploadId();
|
|
|
|
+ List<String> UrlList = new LinkedList<>();
|
|
|
|
+ Map<String,String> queryParam = new HashMap();
|
|
|
|
+ queryParam.put("uploadId",uploadId);
|
|
|
|
+ int size = Integer.valueOf(chunkSize);
|
|
|
|
+ for (int i = 1; i <= size; i++) {
|
|
|
|
+ queryParam.put("partNumber",String.valueOf(i));
|
|
|
|
+ String presignedObjectUrl = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
|
|
|
|
+ .method(Method.PUT)
|
|
|
|
+ .bucket(bucketName)
|
|
|
|
+ .object(objectName)
|
|
|
|
+ .expiry(60 * 60)//上传URL有效期
|
|
|
|
+ .extraQueryParams(queryParam)
|
|
|
|
+ .build());
|
|
|
|
+ UrlList.add(presignedObjectUrl);
|
|
|
|
+ }
|
|
|
|
+ result.put("uploadId",uploadId);
|
|
|
|
+ result.put("uploadUrls",UrlList);
|
|
|
|
+ result.put("objectName",objectName);
|
|
|
|
+ return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,result);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/completeMultipartUpload")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public ResponseBodyVO completeMultipartUpload(@RequestBody Map<String,String> paramMap) throws Exception {
|
|
|
|
+ String objectName = paramMap.get("objectName");
|
|
|
|
+ String uploadId = paramMap.get("uploadId");
|
|
|
|
+ if(ObjectUtil.isNull(objectName) || ObjectUtil.isNull(uploadId)){
|
|
|
|
+ return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"请求参数缺失");
|
|
|
|
+ }
|
|
|
|
+ ListPartsResponse listPartsResponse = minioClient.listParts(bucketName, null, objectName, 10000, 0, uploadId, null, null);
|
|
|
|
+ List<Part> parts = listPartsResponse.result().partList();
|
|
|
|
+ Part[] partArr = new Part[parts.size()];
|
|
|
|
+ int partNumber = 1;
|
|
|
|
+ for (Part part: parts) {
|
|
|
|
+ partArr[partNumber-1] = new Part(partNumber,part.etag());
|
|
|
|
+ partNumber++;
|
|
|
|
+ }
|
|
|
|
+ minioClient.completeMultipartUpload(bucketName,null,objectName,uploadId,partArr,null,null);
|
|
|
|
+ return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,"合并成功");
|
|
|
|
+ }
|
|
}
|
|
}
|