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