From 0e9364e33de8af35cc221317d16c0ce474af6c5b Mon Sep 17 00:00:00 2001 From: zhaochencheng Date: Thu, 29 Dec 2022 21:42:59 +0800 Subject: [PATCH] =?UTF-8?q?oss=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 + .../web/controller/common/OssController.java | 43 +++++++ .../src/main/resources/application-druid.yml | 7 ++ ruoyi-common/pom.xml | 5 + .../java/com/ruoyi/common/utils/OssUtils.java | 111 ++++++++++++++++++ 5 files changed, 172 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OssController.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUtils.java 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(); + } + } + } + +} +