阿里云oss工具类

该博客介绍了如何在Java应用中使用Spring和Spring Boot整合阿里云OSS服务进行文件上传。主要内容包括配置pom文件、yml设置、读取配置文件、上传文件的步骤,以及提供了一个完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pom文件 :

在这里插入图片描述

yml配置 :

在这里插入图片描述

读取配置文件类 :

在这里插入图片描述

上传 :

在这里插入图片描述

完整代码 :



import cn.hutool.core.lang.UUID;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.luzhizheng.common.config.OSSConfig;
import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author Sappy
 * @date 4/6/2023 10:40:44
 */

@Component
public class AliYunOSSUtil {
    private static Logger logger = LoggerFactory.getLogger(AliYunOSSUtil.class);
    public static AliYunOSSUtil aliYunOSSUtil;

    @PostConstruct
    public void init() {
        aliYunOSSUtil = this;
        aliYunOSSUtil.ossConfig = this.ossConfig;
    }

    @Autowired
    private OSSConfig ossConfig;

    /**
     * 上传byte数组
     *
     * @param objectName 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
     * @param bytes      Byte数组。
     * @return
     */
    public static String uploadByte(String objectName, byte[] bytes) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint()
                , aliYunOSSUtil.ossConfig.getAccessKeyId()
                , aliYunOSSUtil.ossConfig.getAccessKeySecret());
        String url = "";
        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(aliYunOSSUtil.ossConfig.getBucket()
                    , objectName, new ByteArrayInputStream(bytes));
            // 设置该属性可以返回response。如果不设置,则返回的response为空。
//            putObjectRequest.setProcess("true");
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 如果上传成功,则返回200。
//            System.out.println(result.getResponse().getStatusCode());
            url = "https://"
                    + aliYunOSSUtil.ossConfig.getBucket()
                    + "."
                    + aliYunOSSUtil.ossConfig.getEndpoint()
                    + "/"
                    + objectName;
        } catch (OSSException oe) {
            logger.error("请求已发送到OSS,但由于某种原因被拒绝并出现错误响应");
            logger.error("Error Message:[{}]", oe.getErrorMessage());
            logger.error("Error Code:[{}]", oe.getErrorCode());
            logger.error("Request ID:[{}]", oe.getRequestId());
            logger.error("Host ID:[{}]", oe.getHostId());
        } catch (ClientException ce) {
            logger.error("客户端在尝试与OSS通信时遇到问题");
            logger.error("Error Message:[{}]", ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;

    }


    /**
     * 上传网络流
     *
     * @param objectName 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
     * @param url        网络流地址
     * @return
     */
    public static String uploadUrl(String objectName, String url) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint()
                , aliYunOSSUtil.ossConfig.getAccessKeyId()
                , aliYunOSSUtil.ossConfig.getAccessKeySecret());

        String fileUrl = "";
        try {
            InputStream inputStream = new URL(url).openStream();
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(aliYunOSSUtil.ossConfig.getBucket()
                    , objectName, inputStream);
            // 设置该属性可以返回response。如果不设置,则返回的response为空。
//            putObjectRequest.setProcess("true");
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 如果上传成功,则返回200。
//            System.out.println(result.getResponse().getStatusCode());
            fileUrl = "https://"
                    + aliYunOSSUtil.ossConfig.getBucket()
                    + "."
                    + aliYunOSSUtil.ossConfig.getEndpoint()
                    + "/"
                    + objectName;
        } catch (OSSException oe) {
            logger.error("请求已发送到OSS,但由于某种原因被拒绝并出现错误响应");
            logger.error("Error Message:[{}]", oe.getErrorMessage());
            logger.error("Error Code:[{}]", oe.getErrorCode());
            logger.error("Request ID:[{}]", oe.getRequestId());
            logger.error("Host ID:[{}]", oe.getHostId());
        } catch (ClientException ce) {
            logger.error("客户端在尝试与OSS通信时遇到问题");
            logger.error("Error Message:[{}]", ce.getMessage());
        } catch (MalformedURLException e) {
            logger.error("url解析异常");
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return fileUrl;
    }

    /**
     * 上传本地文件
     *
     * @param folder 目录需以正斜线结尾 如:"exampledir/"。
     * @param file   file
     * @return
     */
    @SneakyThrows
    public static String upload(String folder, File file) {
        FileInputStream is = null;
        String url = "";
        OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint()
                , aliYunOSSUtil.ossConfig.getAccessKeyId()
                , aliYunOSSUtil.ossConfig.getAccessKeySecret());
        try {
            String absolutePath = file.getAbsolutePath();
            String fileName = file.getName();
            is = new FileInputStream(absolutePath);
            ObjectMetadata metadata = new ObjectMetadata();
            int indexOfLastDot = fileName.lastIndexOf(".");
            String suffix = fileName.substring(indexOfLastDot);
            metadata.setContentType(getContentType(suffix));
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            fileName = uuid + suffix;
            String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());
            fileName = folder + datePath + "/" + fileName;
            PutObjectRequest putObjectRequest = new PutObjectRequest(aliYunOSSUtil.ossConfig.getBucket(), fileName, is);
            //设置ContentType,预览
            putObjectRequest.setMetadata(metadata);
            ossClient.putObject(putObjectRequest);
            url = "https://"
                    + aliYunOSSUtil.ossConfig.getBucket()
                    + "."
                    + aliYunOSSUtil.ossConfig.getEndpoint()
                    + "/"
                    + fileName;
        } catch (OSSException oe) {
            logger.error("请求已发送到OSS,但由于某种原因被拒绝并出现错误响应");
            logger.error("Error Message:[{}]", oe.getErrorMessage());
            logger.error("Error Code:[{}]", oe.getErrorCode());
            logger.error("Request ID:[{}]", oe.getRequestId());
            logger.error("Host ID:[{}]", oe.getHostId());
        } catch (ClientException ce) {
            logger.error("客户端在尝试与OSS通信时遇到问题");
            logger.error("Error Message:[{}]", ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }

    /**
     * MultipartFile上传
     *
     * @param folder        目录需以正斜线结尾 如:"exampledir/"。
     * @param multipartFile multipartFile
     * @return
     */
    @SneakyThrows
    public static String upload(String folder, MultipartFile multipartFile) {
        InputStream inputStream = null;
        OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint(),
                aliYunOSSUtil.ossConfig.getAccessKeyId(), aliYunOSSUtil.ossConfig.getAccessKeySecret());
        String url = "";
        try {
            inputStream = multipartFile.getInputStream();
            String fileName = multipartFile.getOriginalFilename();
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            ObjectMetadata metadata = new ObjectMetadata();
            int indexOfLastDot = fileName.lastIndexOf(".");
            String suffix = fileName.substring(indexOfLastDot);
            fileName = uuid + suffix;
            String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());
            // 拼接fileName , 文件夹1/文件夹2/文件名.jpg
            fileName = folder + datePath + "/" + fileName;
            metadata.setContentT
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值