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