From 300a0fb2b6e0a1255f40db1d618562dd52883e71 Mon Sep 17 00:00:00 2001
From: songhuangfeng123 <shf18767906695@163.com>
Date: 星期二, 26 七月 2022 18:57:30 +0800
Subject: [PATCH] 文件上传
---
safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/FileService.java | 155 +++++++++++++++++++
/dev/null | 128 ----------------
safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/utils/FileUtil.java | 122 +++++++++++++++
safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/FileController.java | 31 +++
safePlatfrom-out-web/pom.xml | 4
5 files changed, 312 insertions(+), 128 deletions(-)
diff --git a/safePlatfrom-out-web/pom.xml b/safePlatfrom-out-web/pom.xml
index d609001..7055f3c 100644
--- a/safePlatfrom-out-web/pom.xml
+++ b/safePlatfrom-out-web/pom.xml
@@ -71,6 +71,10 @@
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ </dependency>
</dependencies>
diff --git a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/FileController.java b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/FileController.java
new file mode 100644
index 0000000..629a787
--- /dev/null
+++ b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/FileController.java
@@ -0,0 +1,31 @@
+package com.gkhy.safePlatform.minioDemo.controller;
+
+import com.gkhy.safePlatform.commons.vo.ResultVO;
+import com.gkhy.safePlatform.minioDemo.service.FileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+
+@RestController
+@RequestMapping(value = "/file")
+public class FileController {
+
+ @Autowired
+ private FileService fileService;
+
+ @RequestMapping(value = "/upload",method = RequestMethod.POST)
+ public ResultVO uploadFile(@RequestParam MultipartFile file , @RequestParam Integer moduleType){
+ return fileService.uploadFile(file,moduleType);
+ }
+
+ @RequestMapping(value = "/download",method = RequestMethod.GET)
+ public void downloadFile(String fileName,HttpServletResponse response){
+ fileService.downloadFile(fileName,response);
+ }
+}
diff --git a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/MinioTest.java b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/MinioTest.java
deleted file mode 100644
index a9edc3e..0000000
--- a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/controller/MinioTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.gkhy.safePlatform.minioDemo.controller;
-
-import com.gkhy.safePlatform.minioDemo.service.MinioAccessService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
-
-@RestController
-@RequestMapping(value = "/test/file")
-public class MinioTest {
-
- @Autowired
- private MinioAccessService minioAccessService;
-
- @RequestMapping(value = "/up",method = RequestMethod.GET)
- private Object testFileUpload(){
- return minioAccessService.uploadFile();
- }
-
- @RequestMapping(value = "/assume",method = RequestMethod.GET)
- public Object testMinioSts(String obj){
- return minioAccessService.getObjectUrl(obj);
- }
-
- @RequestMapping(value = "/put/presign",method = RequestMethod.GET)
- public Object getPutObjectUrl(String obj){
- return minioAccessService.getPutUrl(obj);
- }
-}
diff --git a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/FileService.java b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/FileService.java
new file mode 100644
index 0000000..dbaa30b
--- /dev/null
+++ b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/FileService.java
@@ -0,0 +1,155 @@
+package com.gkhy.safePlatform.minioDemo.service;
+
+import com.gkhy.safePlatform.commons.enums.ResultCodes;
+import com.gkhy.safePlatform.commons.vo.ResultVO;
+import com.gkhy.safePlatform.minioDemo.config.MinioConfig;
+import com.gkhy.safePlatform.minioDemo.enums.ModuleTypeEnums;
+import com.gkhy.safePlatform.minioDemo.utils.FileUtil;
+import io.minio.GetPresignedObjectUrlArgs;
+import io.minio.MinioClient;
+import io.minio.errors.*;
+import io.minio.http.Method;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static com.gkhy.safePlatform.minioDemo.enums.ModuleTypeEnums.*;
+
+@Service
+public class FileService {
+
+ @Resource
+ private MinioConfig minioConfig;
+
+ @Autowired
+ private MinioClient minioClient;
+
+ @Resource
+ private FileUtil fileUtil;
+
+ /**
+ * 文件下载
+ * @param fileName
+ * @param response
+ */
+ public void downloadFile(String fileName, HttpServletResponse response) {
+ fileUtil.downloadFile(fileName,response);
+ }
+
+ /**
+ * 文件上传
+ * @param file
+ * @param moduleType
+ * @return
+ */
+ public ResultVO<String> uploadFile(MultipartFile file, Integer moduleType) {
+ String url = "";
+ String moduleName = initModuleName(moduleType);
+
+ // 文件名转换
+ String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
+ String fileSuffixName = Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf(".")+1);
+ String fileName = moduleName + "_" + time + "_" + initUUID()+"."+fileSuffixName;
+ try {
+ url=fileUtil.upload(file, fileName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return new ResultVO<>(ResultCodes.OK, url);
+ }
+
+ /**
+ * 模块名称转换
+ */
+ private String initModuleName(Integer moduleType){
+ String moduleName = "";
+ ModuleTypeEnums moduleTypeEnums = ModuleTypeEnums.getReviewStatus(moduleType);
+ assert moduleTypeEnums != null;
+ switch (moduleTypeEnums) {
+ case EMERGENCY:
+ moduleName = EMERGENCY.getModuleName();
+ break;
+ case EQUIPMENT:
+ moduleName = EQUIPMENT.getModuleName();
+ break;
+ case GOAL_MANAGE:
+ moduleName = GOAL_MANAGE.getModuleName();
+ break;
+ case INCIDENT_MANAGE:
+ moduleName = INCIDENT_MANAGE.getModuleName();
+ break;
+ default:
+ break;
+ }
+ return moduleName;
+ }
+
+ /**
+ * 生成8位UUID
+ */
+ private String initUUID() {
+ String[] chars = new String[]{"a", "b", "c", "d", "e", "f",
+ "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
+ "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
+ "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
+ "W", "X", "Y", "Z"};
+ StringBuffer shortBuffer = new StringBuffer();
+ String uuid = UUID.randomUUID().toString().replace("-", "");
+ for (int i = 0; i < 8; i++) {
+ String str = uuid.substring(i * 4, i * 4 + 4);
+ int x = Integer.parseInt(str, 16);
+ shortBuffer.append(chars[x % 0x3E]);
+ }
+ return shortBuffer.toString();
+ }
+
+
+
+
+
+ public String getPutUrl(String objName) {
+ String url = null;
+ try {
+ Map<String, String> reqParams = new HashMap<>();
+ reqParams.put("response-content-type", "application/json");
+ url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+ .method(Method.PUT)
+ .bucket(minioConfig.getBucketName())
+ .object(objName)
+ .expiry(60 * 2)
+ .extraQueryParams(reqParams)
+ .build());
+ } catch (ErrorResponseException e) {
+ e.printStackTrace();
+ } catch (InsufficientDataException e) {
+ e.printStackTrace();
+ } catch (InternalException e) {
+ e.printStackTrace();
+ } catch (InvalidKeyException e) {
+ e.printStackTrace();
+ } catch (InvalidResponseException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (XmlParserException e) {
+ e.printStackTrace();
+ } catch (ServerException e) {
+ e.printStackTrace();
+ }
+ return url;
+ }
+
+
+}
diff --git a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/MinioAccessService.java b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/MinioAccessService.java
deleted file mode 100644
index 84b0682..0000000
--- a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/service/MinioAccessService.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.gkhy.safePlatform.minioDemo.service;
-
-import com.gkhy.safePlatform.minioDemo.config.MinioConfig;
-import io.minio.BucketExistsArgs;
-import io.minio.GetPresignedObjectUrlArgs;
-import io.minio.MinioClient;
-import io.minio.UploadObjectArgs;
-import io.minio.errors.*;
-import io.minio.http.Method;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.util.HashMap;
-import java.util.Map;
-
-@Service
-public class MinioAccessService {
-
- @Resource
- private MinioConfig minioConfig;
-
- @Autowired
- private MinioClient minioClient;
-
- public Object uploadFile(){
- try {
- boolean bucketCheck =
- minioClient.bucketExists(BucketExistsArgs.builder()
- .bucket(minioConfig.getBucketName()).build());
- if(bucketCheck == true){
- minioClient.uploadObject(UploadObjectArgs.builder().bucket(minioConfig.getBucketName())
- .object("1.b3dm")
- .filename("G:\\b3dm\\b3dm60\\Tile_+000_+004\\Tile_+000_+004.b3dm")
- .build());
- System.out.println("上传成功");
- }
- } catch (ServerException e) {
- e.printStackTrace();
- } catch (InsufficientDataException e) {
- e.printStackTrace();
- } catch (ErrorResponseException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (InvalidResponseException e) {
- e.printStackTrace();
- } catch (XmlParserException e) {
- e.printStackTrace();
- } catch (InternalException e) {
- e.printStackTrace();
- }
- return "1";
- }
-
- public String getObjectUrl(String objectName){
- String url = null;
- try {
- url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
- .method(Method.GET)
- .bucket(minioConfig.getBucketName())
- .object(objectName)
- .expiry(60).build());
- } catch (ErrorResponseException e) {
- e.printStackTrace();
- } catch (InsufficientDataException e) {
- e.printStackTrace();
- } catch (InternalException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (InvalidResponseException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (XmlParserException e) {
- e.printStackTrace();
- } catch (ServerException e) {
- e.printStackTrace();
- }
- return url;
- }
-
- public String getPutUrl(String objName){
- String url = null;
- try {
- Map<String, String> reqParams = new HashMap<>();
- reqParams.put("response-content-type", "application/json");
- url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
- .method(Method.PUT)
- .bucket(minioConfig.getBucketName())
- .object(objName)
- .expiry(60*2)
- .extraQueryParams(reqParams)
- .build());
- } catch (ErrorResponseException e) {
- e.printStackTrace();
- } catch (InsufficientDataException e) {
- e.printStackTrace();
- } catch (InternalException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (InvalidResponseException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (XmlParserException e) {
- e.printStackTrace();
- } catch (ServerException e) {
- e.printStackTrace();
- }
- return url;
- }
-
-
-}
diff --git a/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/utils/FileUtil.java b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/utils/FileUtil.java
new file mode 100644
index 0000000..2036414
--- /dev/null
+++ b/safePlatfrom-out-web/src/main/java/com/gkhy/safePlatform/minioDemo/utils/FileUtil.java
@@ -0,0 +1,122 @@
+package com.gkhy.safePlatform.minioDemo.utils;
+
+import com.gkhy.safePlatform.minioDemo.config.MinioConfig;
+import com.sun.org.apache.regexp.internal.RE;
+import io.minio.*;
+import io.minio.MinioClient;
+import io.minio.errors.*;
+import io.minio.http.Method;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+@Configuration
+public class FileUtil {
+
+ @Resource
+ private MinioConfig minioConfig;
+
+ @Autowired
+ private MinioClient minioClient;
+
+
+ /**
+ * 文件下载
+ * @param fileName
+ * @param response
+ */
+ public void downloadFile(String fileName, HttpServletResponse response) {
+ try {
+ InputStream file = minioClient.getObject(GetObjectArgs.builder()
+ .bucket(minioConfig.getBucketName())
+ .object(fileName)
+ .build());
+ String filename = new String(fileName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);
+ response.setHeader("Content-Disposition", "attachment;filename=" + filename);
+ ServletOutputStream servletOutputStream = response.getOutputStream();
+ int len;
+ byte[] buffer = new byte[1024];
+ while ((len = file.read(buffer)) > 0) {
+ servletOutputStream.write(buffer, 0, len);
+ }
+ servletOutputStream.flush();
+ file.close();
+ servletOutputStream.close();
+ } catch (ErrorResponseException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * 文件上传
+ *
+ * @param file 文件
+ * @param fileName 存储的文件名称
+ */
+ public String upload(MultipartFile file, String fileName) {
+ String url;
+ try {
+ PutObjectArgs objectArgs = PutObjectArgs.builder()
+ .bucket(minioConfig.getBucketName())
+ .object(fileName)
+ .stream(file.getInputStream(), file.getSize(), -1)
+ .contentType(file.getContentType())
+ .build();
+ //文件名称相同会覆盖
+ minioClient.putObject(objectArgs);
+ url = getFileUrl(fileName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ url = "";
+ }
+ return url;
+ }
+
+ /**
+ * 文件访问路径
+ *
+ * @param objectName 存储桶里的对象名称
+ * expiry :链接失效时间,秒为单位
+ * @return
+ */
+ public String getFileUrl(String objectName) {
+ String url = null;
+ try {
+ url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
+ .method(Method.GET)
+ .bucket(minioConfig.getBucketName())
+ .object(objectName)
+ .expiry(60).build());
+ } catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException | InvalidResponseException | IOException | NoSuchAlgorithmException | XmlParserException | ServerException e) {
+ e.printStackTrace();
+ }
+ return url;
+ }
+
+
+ /**
+ * 检查存储桶是否存在
+ *
+ * @return
+ */
+ @SneakyThrows
+ public boolean bucketCheck() {
+ boolean flag = minioClient.bucketExists(BucketExistsArgs.builder()
+ .bucket(minioConfig.getBucketName()).build());
+ return flag;
+ }
+
+}
--
Gitblit v1.9.2