ycl-common/src/main/java/com/ycl/controller/FileController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-common/src/main/java/com/ycl/service/oss/OssService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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("图片格式只能为jpg、jpeg、png,只修改文件的后缀无效!"); @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!"); } } ycl-common/src/main/java/com/ycl/service/oss/OssService.java
New file @@ -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); } ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java
New file @@ -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 // 第二个参数 上传到oss的文件路径和文件名称 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"; } } 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 // 第二个参数 上传到oss的文件路径和文件名称 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"; } } ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java
New file @@ -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; } }