baizonghao
2023-03-04 8944d4e888930964779c80c6e2133aa194405949
阿里云oss
2个文件已修改
3个文件已添加
321 ■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/controller/FileController.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/oss/OssService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/utils/AliyunUtils.java 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/utils/ConstantPropertiesUtils.java 32 ●●●●● 补丁 | 查看 | 原始文档 | 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;
    }
}