From 8944d4e888930964779c80c6e2133aa194405949 Mon Sep 17 00:00:00 2001
From: baizonghao <1719256278@qq.com>
Date: 星期六, 04 三月 2023 12:05:01 +0800
Subject: [PATCH] 阿里云oss
---
ycl-common/src/main/java/com/ycl/controller/FileController.java | 75 ++++++------
ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java | 32 +++++
ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java | 99 ++++++++++++++++
ycl-common/src/main/java/com/ycl/service/oss/OssService.java | 19 +++
ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java | 96 ++++++++++++++--
5 files changed, 271 insertions(+), 50 deletions(-)
diff --git a/ycl-common/src/main/java/com/ycl/controller/FileController.java b/ycl-common/src/main/java/com/ycl/controller/FileController.java
index 73eeb9e..af875a7 100644
--- a/ycl-common/src/main/java/com/ycl/controller/FileController.java
+++ b/ycl-common/src/main/java/com/ycl/controller/FileController.java
@@ -3,6 +3,7 @@
import com.ycl.api.CommonResult;
import com.ycl.dto.media.Media;
import com.ycl.dto.media.PictureZoomParameter;
+import com.ycl.service.oss.OssService;
import com.ycl.utils.AliyunUtils;
import com.ycl.utils.MediaFileUtil;
import io.swagger.annotations.Api;
@@ -18,23 +19,17 @@
@RequestMapping("/file")
public class FileController {
- private MediaFileUtil mediaFileUtil;
+// private MediaFileUtil mediaFileUtil;
+// @Autowired
+// public void setMediaFileUtil(MediaFileUtil mediaFileUtil) {
+// this.mediaFileUtil = mediaFileUtil;
+// }
- @Autowired
- private AliyunUtils aliyunUtils;
-
- @Autowired
- public void setMediaFileUtil(MediaFileUtil mediaFileUtil) {
- this.mediaFileUtil = mediaFileUtil;
- }
-
- /**
- * 涓婁紶鍥剧墖
- *
- * @param file
- * @return
- */
-
+// /**
+// * 涓婁紶鍥剧墖
+// * @param file
+// * @return
+// */
// @ApiOperation("涓婁紶鍥剧墖")
// @RequestMapping(value = "/medias", method = RequestMethod.POST)
// public CommonResult<Media> mediaUpload(@RequestParam("file") MultipartFile file) {
@@ -48,32 +43,36 @@
// }
// }
- @ApiOperation("涓婁紶鍥剧墖")
- @RequestMapping(value = "/medias", method = RequestMethod.POST)
- public CommonResult<String> mediaUpload(@RequestParam("file") MultipartFile file) {
- try {
- InputStream inputStream = file.getInputStream();
- String orginalFileName = file.getOriginalFilename();
- String res = aliyunUtils.upload(inputStream, orginalFileName);
- return CommonResult.success(res, "ok");
- } catch (Exception e) {
+// @ApiOperation("鍒犻櫎鍥剧墖")
+// @RequestMapping(value = "media/delete", method = RequestMethod.DELETE)
+// public CommonResult<Boolean> delete(@RequestBody Media media) {
+// try {
+// mediaFileUtil.removeMedia(media);
+// return CommonResult.success(true, "ok");
+// } catch (Exception e) {
+// return CommonResult.failed("fail!");
+// }
+// }
- e.printStackTrace();
- }
- return CommonResult.failed("鍥剧墖鏍煎紡鍙兘涓簀pg銆乯peg銆乸ng,鍙慨鏀规枃浠剁殑鍚庣紑鏃犳晥!");
+ @Autowired
+ private OssService ossService;
+
+ @ApiOperation(value = "涓婁紶鍥剧墖")
+ @PostMapping("/upload")
+ public CommonResult<String> uploadImages(MultipartFile file) {
+ String url = ossService.uploadImages(file);
+ return CommonResult.success(url, "ok");
}
- @ApiOperation("鍒犻櫎鍥剧墖")
- @RequestMapping(value = "media/delete", method = RequestMethod.DELETE)
- public CommonResult<Boolean> delete(@RequestBody Media media) {
- try {
- mediaFileUtil.removeMedia(media);
-
- return CommonResult.success(true, "ok");
- } catch (Exception e) {
- return CommonResult.failed("fail!");
+ @ApiOperation(value = "鍒犻櫎鍥剧墖")
+ @PostMapping("/delete")
+ public CommonResult<Boolean> deleteImages(String fileUrl) {
+ boolean flag = ossService.deleteImages(fileUrl);
+ if (flag) {
+ return CommonResult.success(true, "鍒犻櫎鎴愬姛");
}
-
+ return CommonResult.failed("fail!");
}
+
}
diff --git a/ycl-common/src/main/java/com/ycl/service/oss/OssService.java b/ycl-common/src/main/java/com/ycl/service/oss/OssService.java
new file mode 100644
index 0000000..33f597f
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/service/oss/OssService.java
@@ -0,0 +1,19 @@
+package com.ycl.service.oss;
+
+import org.springframework.web.multipart.MultipartFile;
+
+public interface OssService {
+ /**
+ * 涓婁紶鍥剧墖
+ * @param file
+ * @return
+ */
+ String uploadImages(MultipartFile file);
+
+ /**
+ * 鍒犻櫎鍥剧墖
+ * @param fileUrl
+ * @return
+ */
+ boolean deleteImages(String fileUrl);
+}
diff --git a/ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java
new file mode 100644
index 0000000..47a1246
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java
@@ -0,0 +1,99 @@
+package com.ycl.service.oss.impl;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.ObjectMetadata;
+import com.ycl.service.oss.OssService;
+import com.ycl.utils.ConstantPropertiesUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.ByteArrayInputStream;
+import java.util.Date;
+
+@Service
+public class OssServiceImpl implements OssService {
+ @Override
+ public String uploadImages(MultipartFile file) {
+ String endpoint = ConstantPropertiesUtils.END_POINT;
+ String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
+ String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
+ String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
+
+ // 鍒涘缓OSSClient瀹炰緥銆�
+ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+ // 涓婁紶鏂囦欢娴�
+ try {
+ // 鑾峰彇鏂囦欢鐨勫悕绉�
+ String fileName = file.getOriginalFilename();
+ ObjectMetadata objectMetadata = new ObjectMetadata();
+ objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
+ // 璋冪敤oss鐨勬柟娉曞疄鐜伴暱浼�
+ // 绗竴涓弬鏁� bucketName
+ // 绗簩涓弬鏁� 涓婁紶鍒皁ss鐨勬枃浠惰矾寰勫拰鏂囦欢鍚嶇О
+ ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(file.getBytes()),objectMetadata);
+ // 鍏抽棴OSSClient銆�
+ ossClient.shutdown();
+ // 鎶婁笂浼犵殑鏂囦欢璺緞杩斿洖 锛堟墜鍔ㄦ嫾鎺ワ級
+ // 杩欓噷璁剧疆鍥剧墖鏈夋晥鏃堕棿 鎴戣缃簡30骞�
+ Date expiration = new Date(System.currentTimeMillis() + 946080000 * 1000);
+ String url = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();
+ return url;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ @Override
+ public boolean deleteImages(String fileUrl) {
+ String endpoint = ConstantPropertiesUtils.END_POINT;
+ String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
+ String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
+ String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
+ //鍒涘缓OSSClient瀹炰緥
+ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+ String imgFile = fileUrl.replace("https://bucket-ans.oss-cn-hangzhou.aliyuncs.com/", "");
+ String fileName = imgFile.substring(0, imgFile.indexOf("?"));
+
+ // 鏍规嵁BucketName,objectName鍒犻櫎鏂囦欢
+ ossClient.deleteObject(bucketName, fileName);
+ ossClient.shutdown();
+ return true;
+ }
+
+ public static String getcontentType(String FilenameExtension) {
+ if (FilenameExtension.equalsIgnoreCase(".bmp")) {
+ return "image/bmp";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".gif")) {
+ return "image/gif";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
+ FilenameExtension.equalsIgnoreCase(".jpg") ||
+ FilenameExtension.equalsIgnoreCase(".png")) {
+ return "image/jpg";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".html")) {
+ return "text/html";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".txt")) {
+ return "text/plain";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".vsd")) {
+ return "application/vnd.visio";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".pptx") ||
+ FilenameExtension.equalsIgnoreCase(".ppt")) {
+ return "application/vnd.ms-powerpoint";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".docx") ||
+ FilenameExtension.equalsIgnoreCase(".doc")) {
+ return "application/msword";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".xml")) {
+ return "text/xml";
+ }
+ return "image/jpg";
+ }
+}
diff --git a/ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java b/ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java
index fa3b84e..c08dcff 100644
--- a/ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java
+++ b/ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java
@@ -4,10 +4,15 @@
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
+import com.aliyun.oss.model.ObjectMetadata;
+import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.util.Date;
import java.util.UUID;
@Component
@@ -34,19 +39,49 @@
AliyunUtils.bucketName = bucketName;
}
- public static String upload(InputStream inputStream, String orginalFileName){
+// public static String upload(InputStream inputStream, String orginalFileName){
+// // 鍒涘缓OSSClient瀹炰緥銆�
+// OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, keySecret);
+// // 鏂囦欢鍚�
+// String fileName = UUID.randomUUID().toString();
+// //鏂囦欢鎵╁睍鍚�
+// String fileExtention = orginalFileName.substring(orginalFileName.lastIndexOf("."));
+// //鏈�缁堢殑璺緞 绫讳技avatar/2021/12/05/xxxxxxxxx.jpg
+// String objectName = fileName+fileExtention;
+// ossClient.putObject(bucketName, objectName, inputStream);
+// // 鍏抽棴OSSClient銆�
+// ossClient.shutdown();
+// return "https://"+bucketName+"."+endpoint+"/"+objectName;
+// }
+
+ public String upload(MultipartFile file) {
+
+ String accessKeyId = keyId;
+ String accessKeySecret = keySecret;
+
// 鍒涘缓OSSClient瀹炰緥銆�
- OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, keySecret);
- // 鏂囦欢鍚�
- String fileName = UUID.randomUUID().toString();
- //鏂囦欢鎵╁睍鍚�
- String fileExtention = orginalFileName.substring(orginalFileName.lastIndexOf("."));
- //鏈�缁堢殑璺緞 绫讳技avatar/2021/12/05/xxxxxxxxx.jpg
- String objectName = fileName+fileExtention;
- ossClient.putObject(bucketName, objectName, inputStream);
- // 鍏抽棴OSSClient銆�
- ossClient.shutdown();
- return "https://"+bucketName+"."+endpoint+"/"+objectName;
+ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+ // 涓婁紶鏂囦欢娴�
+ try {
+ // 鑾峰彇鏂囦欢鐨勫悕绉�
+ String fileName = file.getOriginalFilename();
+ ObjectMetadata objectMetadata = new ObjectMetadata();
+ objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
+ // 璋冪敤oss鐨勬柟娉曞疄鐜伴暱浼�
+ // 绗竴涓弬鏁� bucketName
+ // 绗簩涓弬鏁� 涓婁紶鍒皁ss鐨勬枃浠惰矾寰勫拰鏂囦欢鍚嶇О
+ ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(file.getBytes()),objectMetadata);
+ // 鍏抽棴OSSClient銆�
+ ossClient.shutdown();
+ // 鎶婁笂浼犵殑鏂囦欢璺緞杩斿洖 锛堟墜鍔ㄦ嫾鎺ワ級
+ // 杩欓噷璁剧疆鍥剧墖鏈夋晥鏃堕棿 鎴戣缃簡30骞�
+ Date expiration = new Date(System.currentTimeMillis() + 946080000 * 1000);
+ String url = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();
+ return url;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
}
public static void delete(String link){
@@ -77,5 +112,42 @@
}
+ // 瀹炵幇鍥剧墖鐨勯瑙堝姛鑳�
+ public static String getcontentType(String FilenameExtension) {
+ if (FilenameExtension.equalsIgnoreCase(".bmp")) {
+ return "image/bmp";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".gif")) {
+ return "image/gif";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
+ FilenameExtension.equalsIgnoreCase(".jpg") ||
+ FilenameExtension.equalsIgnoreCase(".png")) {
+ return "image/jpg";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".html")) {
+ return "text/html";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".txt")) {
+ return "text/plain";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".vsd")) {
+ return "application/vnd.visio";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".pptx") ||
+ FilenameExtension.equalsIgnoreCase(".ppt")) {
+ return "application/vnd.ms-powerpoint";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".docx") ||
+ FilenameExtension.equalsIgnoreCase(".doc")) {
+ return "application/msword";
+ }
+ if (FilenameExtension.equalsIgnoreCase(".xml")) {
+ return "text/xml";
+ }
+ return "image/jpg";
+ }
+
+
}
diff --git a/ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java b/ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java
new file mode 100644
index 0000000..a97c2bc
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java
@@ -0,0 +1,32 @@
+package com.ycl.utils;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ConstantPropertiesUtils implements InitializingBean {
+
+ @Value("${aliyun.oss.endpoint}")
+ private String endpoint;
+ @Value("${aliyun.oss.keyId}")
+ private String keyId;
+ @Value("${aliyun.oss.keySecret}")
+ private String keySecret;
+ @Value("${aliyun.oss.bucketName}")
+ private String bucketName;
+
+ // 瀹氫箟鍏紑鐨勯潤鎬佸父閲�
+ public static String END_POINT;
+ public static String ACCESS_KEY_ID;
+ public static String ACCESS_KEY_SECRET;
+ public static String BUCKET_NAME;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ END_POINT = endpoint;
+ ACCESS_KEY_ID = keyId;
+ ACCESS_KEY_SECRET = keySecret;
+ BUCKET_NAME = bucketName;
+ }
+}
--
Gitblit v1.8.0