Browse Source

[修改]加入阿里云oss文件上传

13660505945 1 day ago
parent
commit
bfe96dd0d8

+ 1 - 2
pom.xml

@@ -145,9 +145,8 @@
 		<dependency>
 			<groupId>cn.hutool</groupId>
 			<artifactId>hutool-all</artifactId>
-			<version>5.7.17</version>
+			<version>5.8.25</version>
 		</dependency>
-
 	</dependencies>
 
 	<build>

+ 43 - 0
src/main/java/com/jsh/erp/controller/OssController.java

@@ -0,0 +1,43 @@
+package com.jsh.erp.controller;
+
+import com.jsh.erp.base.AjaxResult;
+import com.jsh.erp.utils.OssUtils;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "OSS对象存储Controller")
+@RequestMapping("/oss")
+public class OssController {
+    @Autowired
+    OssUtils ossUtils;
+
+    @PostMapping("upload")
+    public AjaxResult uploadFile(MultipartFile file) {
+        //返回上传oss的url
+        String url = ossUtils.uploadOneFile(file);
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("fileName", file.getOriginalFilename());
+        ajax.put("url", url);
+        return ajax;
+    }
+
+    @PostMapping("uploadArrayFile")
+    public List<String> uploadArrayFile(MultipartFile[] files) {
+        //返回上传oss的url
+        return ossUtils.uploadArrayFile(files);
+    }
+
+    @PostMapping("deleteFile")
+    public boolean deleteFile(@RequestBody String fileUrl) {
+        //返回是否删除成功
+        return ossUtils.deleteFile(fileUrl);
+    }
+}

+ 111 - 0
src/main/java/com/jsh/erp/utils/OssUtils.java

@@ -0,0 +1,111 @@
+package com.jsh.erp.utils;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.lang.UUID;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class OssUtils {
+
+    @Value("${aliyun.accessKeyId}")
+    private String accessKeyId;
+
+    @Value("${aliyun.secretAccessKey}")
+    private String secretAccessKey;
+
+    @Value("${aliyun.oss.endPoint}")
+    private String endPoint;
+
+    @Value("${aliyun.oss.bucketName}")
+    private String bucketName;
+
+    public String uploadOneFile(MultipartFile file) {
+
+        // 创建OSSClient实例。
+        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
+        //设置文件名
+        String fileName = new DateTime().toString("yyyy/MM/dd")
+                + UUID.randomUUID().toString().replace("-", "")
+                + file.getOriginalFilename();
+
+        try {
+            // 创建PutObject请求。
+            ossClient.putObject(bucketName, fileName, file.getInputStream());
+
+            String url = "https://" + bucketName + "." + endPoint + "/" + fileName;
+            return url;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
+    }
+
+    public List<String> uploadArrayFile(MultipartFile[] files) {
+        // 创建OSSClient实例。
+        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
+        List<String> list = new ArrayList<>();
+
+        try {
+            //设置文件名
+            for (MultipartFile file : files) {
+                String fileName = new DateTime().toString("yyyy/MM/dd")
+                        + UUID.randomUUID().toString().replace("-", "")
+                        + file.getOriginalFilename();
+                // 创建PutObject请求。
+                ossClient.putObject(bucketName, fileName, file.getInputStream());
+
+                String url = "http://" + bucketName + "." + endPoint + "/" + fileName;
+//                System.out.println(url);
+                list.add(url);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
+        return list;
+
+    }
+
+    public boolean deleteFile(String fileUrl) {
+
+        // 创建OSSClient实例。
+        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
+        /** oss删除文件是根据文件完成路径删除的,但文件完整路径中不能包含Bucket名称。
+         * 比如文件路径为:http://edu-czf.oss-cn-guangzhou.aliyuncs.com/2022/08/abc.jpg",
+         * 则完整路径就是:2022/08/abc.jpg
+         */
+        int begin = ("http://" + bucketName + "." + endPoint + "/").length(); //找到文件路径的开始下标
+        String deleteUrl = fileUrl.substring(begin);
+
+        try {
+            // 删除文件请求
+            ossClient.deleteObject(bucketName, deleteUrl);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
+    }
+
+}
+

+ 8 - 0
src/main/resources/application-dev.yml

@@ -21,3 +21,11 @@ spring:
     host: 127.0.0.1
     port: 6379
     password:
+
+aliyun:
+  accessKeyId: LTAI5tAWjmJQaDBF6u7JAgap
+  secretAccessKey: t9ffHVVngMbMZcVPXtgxF6NU9lHc95
+  oss:
+    endPoint: oss-cn-hangzhou.aliyuncs.com
+    bucketName: xiangli-erp
+    miniProgramAppId: wxd716cb744e32271a

+ 8 - 0
src/main/resources/application-pro.yml

@@ -21,3 +21,11 @@ spring:
     host: 127.0.0.1
     port: 16379
     password: jiesuiredis2022
+
+aliyun:
+  accessKeyId: LTAI5tAWjmJQaDBF6u7JAgap
+  secretAccessKey: t9ffHVVngMbMZcVPXtgxF6NU9lHc95
+  oss:
+    endPoint: oss-cn-hangzhou.aliyuncs.com
+    bucketName: xiangli-erp
+    miniProgramAppId: wxd716cb744e32271a

+ 8 - 0
src/main/resources/application-test.yml

@@ -21,3 +21,11 @@ spring:
     host: 127.0.0.1
     port: 16379
     password: jiesuiredis2022
+
+aliyun:
+  accessKeyId: LTAI5tAWjmJQaDBF6u7JAgap
+  secretAccessKey: t9ffHVVngMbMZcVPXtgxF6NU9lHc95
+  oss:
+    endPoint: oss-cn-hangzhou.aliyuncs.com
+    bucketName: xiangli-erp
+    miniProgramAppId: wxd716cb744e32271a

+ 1 - 1
src/main/resources/application.yml

@@ -18,7 +18,7 @@ plugin:
 
 spring:
   profiles:
-    active: test
+    active: dev
   servlet:
     #文件上传限制(byte)
     multipart: