root 2 years ago
parent
commit
62756d343c

+ 9 - 8
simulation-resource-common/src/main/java/com/css/simulation/resource/common/configuration/minio/MinioConfiguration.java

@@ -15,6 +15,7 @@ public class MinioConfiguration {
     private String endpointPublic;
     private String accessKey;
     private String secretKey;
+    private String bucketName;
 
     @Bean
     public SubMinioClient minioClientPrivate() {
@@ -25,13 +26,13 @@ public class MinioConfiguration {
         return new SubMinioClient(minioClient);
     }
 
-    @Bean
-    public SubMinioClient minioClientPublic() {
-        MinioClient minioClient = MinioClient.builder()
-                .endpoint(endpointPublic)
-                .credentials(accessKey, secretKey)
-                .build();
-        return new SubMinioClient(minioClient);
-    }
+//    @Bean
+//    public SubMinioClient minioClientPublic() {
+//        MinioClient minioClient = MinioClient.builder()
+//                .endpoint(endpointPublic)
+//                .credentials(accessKey, secretKey)
+//                .build();
+//        return new SubMinioClient(minioClient);
+//    }
 
 }

+ 30 - 23
simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/MinioController.java

@@ -6,6 +6,7 @@ import api.common.pojo.param.MinioParameter;
 import api.common.util.FileUtil;
 import api.common.util.ObjectUtil;
 import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.configuration.minio.MinioConfiguration;
 import com.css.simulation.resource.common.configuration.minio.SubMinioClient;
 import com.css.simulation.resource.common.util.MinioUtil;
 import io.minio.CreateMultipartUploadResponse;
@@ -14,8 +15,6 @@ import io.minio.ListPartsResponse;
 import io.minio.errors.*;
 import io.minio.http.Method;
 import io.minio.messages.Part;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -36,14 +35,11 @@ public class MinioController {
     @Resource(name = "minioClientPrivate")
     private SubMinioClient minioClientPrivate;
 
-    @Resource(name = "minioClientPublic")
-    private SubMinioClient minioClientPublic;
+    @Resource
+    private MinioConfiguration minioConfiguration;
 
-    @Value("${minio.bucket-name}")
-    private String bucketName;
-
-    @Autowired
-    RedisController redisController;
+//    @Resource(name = "minioClientPublic")
+//    private SubMinioClient minioClientPublic;
 
 
     @PostMapping("/hello")
@@ -59,10 +55,12 @@ public class MinioController {
         MinioUtil.uploadFromMultipartFile(
                 minioClientPrivate,
                 file,
-                bucketName,
+                minioConfiguration.getBucketName(),
                 objectName
         );
-        String previewUrl = MinioUtil.getPreviewUrl(minioClientPublic, Method.GET, bucketName, objectName);
+//        String previewUrl = MinioUtil.getPreviewUrl(minioClientPublic, Method.GET, minioConfiguration.getBucketName(), objectName);
+        String previewUrl = MinioUtil.getPublicPreviewUrl(minioClientPrivate, Method.GET, minioConfiguration.getBucketName(), objectName,
+                minioConfiguration.getEndpointPrivate(), minioConfiguration.getEndpointPublic());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, "请求成功!", previewUrl);
     }
 
@@ -72,7 +70,7 @@ public class MinioController {
             @RequestBody @Validated MinioParameter minioParameter
     ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
 
-        List<String> objects = MinioUtil.listObjects(minioClientPrivate, bucketName, minioParameter.getObjectName());
+        List<String> objects = MinioUtil.listObjects(minioClientPrivate, minioConfiguration.getBucketName(), minioParameter.getObjectName());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, objects);
     }
 
@@ -80,7 +78,7 @@ public class MinioController {
     public ResponseBodyVO<List<String>> listDeepOne(
             @RequestBody @Validated MinioParameter minioParameter
     ) throws Exception {
-        List<String> objects = MinioUtil.listObjectsUnRecursive(minioClientPrivate, bucketName, minioParameter.getObjectName());
+        List<String> objects = MinioUtil.listObjectsUnRecursive(minioClientPrivate, minioConfiguration.getBucketName(), minioParameter.getObjectName());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, objects);
     }
 
@@ -91,7 +89,7 @@ public class MinioController {
     ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
         InputStream inputStream = MinioUtil.downloadToStream(
                 minioClientPrivate,
-                bucketName,
+                minioConfiguration.getBucketName(),
                 minioParameter.getObjectName()
         );
         String fileName = FileUtil.getFileName(minioParameter.getObjectName());
@@ -102,7 +100,7 @@ public class MinioController {
     public void preview(@RequestParam("objectName") String objectName, HttpServletResponse response) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
         InputStream inputStream = MinioUtil.downloadToStream(
                 minioClientPrivate,
-                bucketName,
+                minioConfiguration.getBucketName(),
                 objectName
         );
         String fileName = FileUtil.getFileName(objectName);
@@ -110,8 +108,10 @@ public class MinioController {
     }
 
     @RequestMapping("/getPreviewUrl")
-    public ResponseBodyVO<String> getPreviewUrl(@RequestBody @Validated MinioParameter minioParameter) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
-        String previewUrl = MinioUtil.getPreviewUrl(minioClientPublic, Method.GET, bucketName, minioParameter.getObjectName());
+    public ResponseBodyVO<String> getPreviewUrl(@RequestBody @Validated MinioParameter minioParameter) {
+//        String previewUrl = MinioUtil.getPreviewUrl(minioClientPublic, Method.GET, minioConfiguration.getBucketName(), minioParameter.getObjectName());
+        String previewUrl = MinioUtil.getPublicPreviewUrl(minioClientPrivate, Method.GET, minioConfiguration.getBucketName(), minioParameter.getObjectName(),
+                minioConfiguration.getEndpointPrivate(), minioConfiguration.getEndpointPublic());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, "请求成功!", previewUrl);
     }
 
@@ -129,7 +129,7 @@ public class MinioController {
             objectName = "algorithm/" + nowTime + "/" + objectName;
         }
         Map<String, Object> result = new HashMap<>();//结果数据
-        CreateMultipartUploadResponse multipartUpload = minioClientPrivate.createMultipartUpload(bucketName, null, objectName, null, null);
+        CreateMultipartUploadResponse multipartUpload = minioClientPrivate.createMultipartUpload(minioConfiguration.getBucketName(), null, objectName, null, null);
         String uploadId = multipartUpload.result().uploadId();
         List<String> UrlList = new LinkedList<>();
         Map<String, String> queryParam = new HashMap<>();
@@ -137,9 +137,16 @@ public class MinioController {
         int size = Integer.parseInt(chunkSize);
         for (int i = 1; i <= size; i++) {
             queryParam.put("partNumber", String.valueOf(i));
-            String presignedObjectUrl = minioClientPublic.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+//            String presignedObjectUrl = minioClientPublic.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+//                    .method(Method.PUT)
+//                    .bucket(minioConfiguration.getBucketName())
+//                    .object(objectName)
+//                    .expiry(60 * 60)//上传URL有效期
+//                    .extraQueryParams(queryParam)
+//                    .build());
+            String presignedObjectUrl = minioClientPrivate.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                     .method(Method.PUT)
-                    .bucket(bucketName)
+                    .bucket(minioConfiguration.getBucketName())
                     .object(objectName)
                     .expiry(60 * 60)//上传URL有效期
                     .extraQueryParams(queryParam)
@@ -160,7 +167,7 @@ public class MinioController {
         if (ObjectUtil.isNull(objectName) || ObjectUtil.isNull(uploadId)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "请求参数缺失!");
         }
-        ListPartsResponse listPartsResponse = minioClientPrivate.listParts(bucketName, null, objectName, 10000, 0, uploadId, null, null);
+        ListPartsResponse listPartsResponse = minioClientPrivate.listParts(minioConfiguration.getBucketName(), null, objectName, 10000, 0, uploadId, null, null);
         List<Part> parts = listPartsResponse.result().partList();
         Part[] partArr = new Part[parts.size()];
         int partNumber = 1;
@@ -168,7 +175,7 @@ public class MinioController {
             partArr[partNumber - 1] = new Part(partNumber, part.etag());
             partNumber++;
         }
-        minioClientPrivate.completeMultipartUpload(bucketName, null, objectName, uploadId, partArr, null, null);
+        minioClientPrivate.completeMultipartUpload(minioConfiguration.getBucketName(), null, objectName, uploadId, partArr, null, null);
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, "合并成功!");
     }
 
@@ -177,7 +184,7 @@ public class MinioController {
             @RequestBody @Validated MinioParameter minioParameter
     ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
 
-        MinioUtil.removeObject(minioClientPrivate, bucketName, minioParameter.getObjectName());
+        MinioUtil.removeObject(minioClientPrivate, minioConfiguration.getBucketName(), minioParameter.getObjectName());
     }
 
 }

+ 30 - 0
simulation-resource-common/src/main/java/com/css/simulation/resource/common/util/MinioUtil.java

@@ -5,6 +5,7 @@ import io.minio.errors.*;
 import io.minio.http.Method;
 import io.minio.messages.Item;
 import jdk.nashorn.internal.runtime.regexp.joni.exception.InternalException;
+import lombok.SneakyThrows;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -114,6 +115,35 @@ public class MinioUtil {
                 .build());
     }
 
+
+    /**
+     * 获取公网预览路径,需要设置 nginx 转发
+     *
+     * @param minioClient minio客户端
+     * @param method      请求方式
+     * @param bucket      bucket
+     * @param object      object
+     * @param privateIp   私网ip
+     * @param publicIp    公网ip
+     * @return 预览路径
+     */
+    @SneakyThrows
+    public static String getPublicPreviewUrl(
+            MinioClient minioClient,
+            Method method,
+            String bucket,
+            String object,
+            String privateIp,
+            String publicIp
+    ) {
+        return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+                        .method(method)
+                        .bucket(bucket)
+                        .object(object)
+                        .build())
+                .replace(privateIp, publicIp);
+    }
+
     /**
      * 通过文件路径上传文件上传文件
      */

+ 0 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -1193,7 +1193,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         InputStream fileInputStream = null;
         InputStreamReader inputStreamReader = null;
         BufferedReader bufferedReader = null;
-//        File file = null;
         try {
             //2.解析仿真文件
             // time

+ 1 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneNaturalController.java

@@ -78,6 +78,7 @@ public class SceneNaturalController {
         sceneImportPO.setId(sceneImportParam.getId());
         sceneImportPO.setStatus(DictConstants.SCENE_IMPORT_STATUS_3);
         sceneImportService.updateStatus(sceneImportPO);
+        // 解析参数
         sceneImportPO = sceneNaturalService.importMiNio(sceneImportParam);
         sceneImportService.updateInfo(sceneImportPO);
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);

+ 5 - 10
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneNaturalService.java

@@ -547,12 +547,12 @@ public class SceneNaturalService {
                                     // -------------------------------- 目标行为 --------------------------------
                                     JsonNode targetBehavior = root.path("目标行为");
 
-                                    if (ObjectUtil.isNull(naturalEnvironment)
-                                            && ObjectUtil.isNull(road)
-                                            && ObjectUtil.isNull(selfDrivingBehavior)
-                                            && ObjectUtil.isNull(targetBehavior)) {
+                                    if (!(ObjectUtil.isNotNull(naturalEnvironment)
+                                            && ObjectUtil.isNotNull(road)
+                                            && (ObjectUtil.isNotNull(selfDrivingBehavior)
+                                            || ObjectUtil.isNotNull(targetBehavior)))) {
                                         sceneImportPO.setStatus(DictConstants.SCENE_IMPORT_STATUS_2);
-                                        sceneImportPO.setErrorMessage("该文件:" + adress + "与自然场景类型不匹配,解析失败,请检查");
+                                        sceneImportPO.setErrorMessage("该文件:" + adress + "与自然场景类型不匹配,解析失败,请检查");
                                         return sceneImportPO;
                                     }
                                     sceneNaturalPO.setNaturalId(api.common.util.StringUtil.getRandomUUID());
@@ -636,11 +636,6 @@ public class SceneNaturalService {
                             listLog.add(sceneNaturalPO.getNaturalName());
                             successNum = successNum + 1;
                         } catch (Exception e) {
-//                            if (ObjectUtil.isNull(errorMessage)) {
-//                                errorMessage = scenePath;
-//                            } else {
-//                                errorMessage = errorMessage + ";" + scenePath;
-//                            }
                             errorMessage = e.getMessage();
                             e.printStackTrace();
                             falseNum = falseNum + 1;