diff --git a/pom.xml b/pom.xml
index 9eea497..c786873 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,6 +126,12 @@
${commons.fileupload.version}
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.15.2
+
+
org.apache.poi
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OssController.java
new file mode 100644
index 0000000..aa2bafa
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OssController.java
@@ -0,0 +1,43 @@
+package com.ruoyi.web.controller.common;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.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 uploadArrayFile(MultipartFile[] files) {
+ //返回上传oss的url
+ return ossUtils.uploadArrayFile(files);
+ }
+
+ @PostMapping("deleteFile")
+ public boolean deleteFile(@RequestBody String fileUrl) {
+ //返回是否删除成功
+ return ossUtils.deleteFile(fileUrl);
+ }
+}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index b7965e7..804c2a9 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -35,3 +35,10 @@ ruoyi:
profile: C:/ruoyi/uploadPath
scheduling:
enabled: false
+#操作oss需要的一些参数
+aliyun:
+ accessKeyId: 你的accessKeyId # 阿里云的accessKeyId
+ secretAccessKey: 你的accessKey密码 # accessKey 密码
+ oss:
+ endPoint: 你的endpoint # Endpoint:在阿里云oss控制台查看自己使用的endpoint
+ bucketName: 你的bucketName # bucket 名称
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 420c027..4afb743 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -101,6 +101,11 @@
jaxb-api
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+
+
org.springframework.boot
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUtils.java
new file mode 100644
index 0000000..ee83e64
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUtils.java
@@ -0,0 +1,111 @@
+package com.ruoyi.common.utils;
+
+import cn.hutool.core.date.DateTime;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.ruoyi.common.utils.uuid.UUID;
+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 = "http://" + bucketName + "." + endPoint + "/" + fileName;
+ return url;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ } finally {
+ if (ossClient != null) {
+ ossClient.shutdown();
+ }
+ }
+ }
+
+ public List uploadArrayFile(MultipartFile[] files) {
+ // 创建OSSClient实例。
+ OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
+ List 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();
+ }
+ }
+ }
+
+}
+