springboot实战之oss上传工具封装

项目分析

实际项目中,使用到阿里云oss资源,项目用java开发,封装个工具,其他地方使用方便。

实现工具类

public class AliyunOssUploadUtils {
    protected static final Logger logger = LoggerFactory.getLogger(AliyunOssUploadUtils.class);

    private static volatile OSSClient ossClient = null;

    private static AliyunOssConfig aliyunOssConfig;
    @Autowired
    public AliyunOssUploadUtils(AliyunOssConfig aliyunOssConfig) {
        AliyunOssUploadUtils.aliyunOssConfig = aliyunOssConfig;
    }

    public static String uploadFile(MultipartFile file) throws Exception {
        //上传类型判断
        int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
        {
            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
        }
        FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
        OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
        // 编码文件名
        String filePathName = FileUploadUtils.extractFilename(file);
        // 文件路径名称
        filePathName = aliyunOssConfig.getFilehost() + "/" + filePathName;

        try {
            //判断是否是图片
            /**
            if("png".equals(ext)||"jpg".equals(ext)||"jpeg".equals(ext)||"webp".equals(ext)){
                logger.info("进行图片压缩处理",ext);
                String suffixName;
                String suffixNameOrigin = getExtensionName(file.getOriginalFilename());
                if ("png".equals(suffixNameOrigin)) {
                    suffixName = "png";
                } else {
                    suffixName = "jpg";
                }
                String originalPath = file.getOriginalFilename(); //获取原始文件名
                String contextPath = System.getProperty("user.dir"); //获取项目的路径
                String path = contextPath + File.separator + originalPath; //拼接文件路径
                File tempFile = new File(path); //通过路径创建文件对象
                file.transferTo(tempFile); //将MultipartFile对象转为File对象
                //压缩图片
                Thumbnails.of(tempFile)
                        .scale(0.5) //缩放比例
                        .outputFormat(suffixName) //输出格式
                        .toFile(tempFile);
                //上传Thumbnails.of(file.getInputStream()).scale(0.8f).outputFormat("jpg").outputQuality(0.5).toFile(uploadPath + random);
                ossClient.putObject(aliyunOssConfig.getBucketName(), filePathName, tempFile);
                tempFile.delete();
            }else {
                ossClient.putObject(aliyunOssConfig.getBucketName(), filePathName, file.getInputStream());
            }**/
            //Thumbnails.of(file.getInputStream()).scale(0.8f).outputFormat("jpg").outputQuality(0.5).toFile(filePathName);
            ossClient.putObject(aliyunOssConfig.getBucketName(), filePathName, file.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return aliyunOssConfig.getUrl() + "/" + filePathName;
    }

    public static String addFileByByteArray(MultipartFile file, String fileName, byte[] byteArray) {
        OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        //公共读
        metadata.setObjectAcl(CannedAccessControlList.PublicRead);
        metadata.setCacheControl("no-cache");
        metadata.setHeader("Pragma", "no-cache");
        metadata.setContentDisposition("inline;filename=" + fileName);
        metadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
        try {
            // 编码文件名
            String filePathName = FileUploadUtils.extractFilename(file);
            // 文件路径名称
            fileName = aliyunOssConfig.getFilehost() + "/" + filePathName;
            //fileName = dir + "/" + fileName;
            ossClient.putObject(aliyunOssConfig.getBucketName(), fileName, new ByteArrayInputStream(byteArray), metadata);
        } catch (Exception e) {
            return null;
        } finally {
            ossClient.shutdown();
        }
        return aliyunOssConfig.getUrl() + "/" + fileName;//自己绑定OSS的域名

    }

    public static String getcontentType(String FilenameExtension) {
        if (".bmp".equalsIgnoreCase(FilenameExtension)) {
            return "image/bmp";
        }
        if (".gif".equalsIgnoreCase(FilenameExtension)) {
            return "image/gif";
        }
        if (".jpeg".equalsIgnoreCase(FilenameExtension) ||
                ".jpg".equalsIgnoreCase(FilenameExtension)) {
            return "image/jpeg";
        }
        if (".html".equalsIgnoreCase(FilenameExtension)) {
            return "text/html";
        }
        if (".txt".equalsIgnoreCase(FilenameExtension)) {
            return "text/plain";
        }
        if (".vsd".equalsIgnoreCase(FilenameExtension)) {
            return "application/vnd.visio";
        }
        if (".pptx".equalsIgnoreCase(FilenameExtension) ||
                ".ppt".equalsIgnoreCase(FilenameExtension)) {
            return "application/vnd.ms-powerpoint";
        }
        if (".docx".equalsIgnoreCase(FilenameExtension) ||
                ".doc".equalsIgnoreCase(FilenameExtension)) {
            return "application/msword";
        }
        if (".xml".equalsIgnoreCase(FilenameExtension)) {
            return "text/xml";
        }
        if (".png".equalsIgnoreCase(FilenameExtension)) {
            return "image/png";
        }
        return "image/jpg";
    }

    public static boolean deleteFile(String fileUrl) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
        /** oss删除文件是根据文件完成路径删除的,但文件完整路径中不能包含Bucket名称。
         * 比如文件路径为:http://edu-czf.oss-cn-guangzhou.aliyuncs.com/2022/08/abc.jpg",
         * 则完整路径就是:2022/08/abc.jpg
         */
        int begin = ("https://" + aliyunOssConfig.getBucketName() + "." + aliyunOssConfig.getEndpoint() + "/").length(); //找到文件路径的开始下标
        String deleteUrl = fileUrl.substring(begin);

        try {
            // 删除文件请求
            ossClient.deleteObject(aliyunOssConfig.getBucketName() , deleteUrl);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }


}

相关推荐

  1. springboot实战oss工具封装

    2023-12-16 03:46:02       37 阅读
  2. PHP实现阿里OSS文件

    2023-12-16 03:46:02       35 阅读
  3. vue若依el-upload实现oss

    2023-12-16 03:46:02       33 阅读

最近更新

  1. kotlin typealias

    2023-12-16 03:46:02       0 阅读
  2. 如何做到高级Kotlin强化实战?(二)

    2023-12-16 03:46:02       0 阅读
  3. 力学笃行(四)Qt 线程与信号槽

    2023-12-16 03:46:02       2 阅读
  4. 【C/C++】VSCode 插件支持

    2023-12-16 03:46:02       2 阅读
  5. 华为HCIP Datacom H12-821 卷32

    2023-12-16 03:46:02       2 阅读
  6. Zookeeper底层原理

    2023-12-16 03:46:02       1 阅读

热门阅读

  1. 重新格式化字符串

    2023-12-16 03:46:02       39 阅读
  2. 37、池化与卷积的区别

    2023-12-16 03:46:02       32 阅读
  3. 记录 | ubuntu安装Albert

    2023-12-16 03:46:02       31 阅读
  4. 信息收集 - 渗透测试流程

    2023-12-16 03:46:02       34 阅读
  5. react组件注意事项

    2023-12-16 03:46:02       34 阅读
  6. 测试学习笔记1:@SpringbootTest测试注解详解

    2023-12-16 03:46:02       37 阅读
  7. 一个简单的cmake模板(C++)

    2023-12-16 03:46:02       45 阅读
  8. Zabbix监控网站

    2023-12-16 03:46:02       34 阅读
  9. idea注释高亮提示

    2023-12-16 03:46:02       46 阅读