阿里云OSS文件上传

327 阅读2分钟

首先需要一个阿里云账号,并且账号里面还开通了OSS储存功能(新用户有所有功能的三个月的免费试用) 阿里云网址:阿里云登录页 (aliyun.com) 需要创建一个bucket空间

PixPin_2024-09-11_22-07-31.png

总体流程图

PixPin_2024-09-11_22-09-57.png

我们需要获取自己创建的bucket空间的这四个要素:

PixPin_2024-09-11_22-11-22.png

导入依赖:

<!--阿里云oss-->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.17.4</version>
</dependency>

还需要创建阿里云的配置类:

/**
 * 阿里云 OSS 工具类
 */
@Component//添加到IOC(控制反转)容器,生成bean
public class AliOSSUtils {


    @Autowired
    private AliOSSProperties aliOSSProperties;//注入AliOSSProperties类下的aliyunOSS配置信息

    /**
     * 实现上传图片到OSS
     */
    /*throws IOException, ClientException这个代码的作用是通过throws关键字声明这个upload在运行时,
    如果在处理文件上传的过程中遇到了输入输出相关的错误(比如文件无法读取),就会抛出IOException。
    如果遇到了与阿里云OSS客户端相关的错误(比如认证失败),就会抛出ClientException。 作用就是告诉方法调用者错误类型*/
    public String upload(MultipartFile file) throws IOException, ClientException {
        //获取阿里云OSS的配置参数
        String endpoint = aliOSSProperties.getEndpoint();
        String accessKeyId = aliOSSProperties.getAccessKeyId();
        String accessKrySecret = aliOSSProperties.getAccessKeySecret();
        String bucketName = aliOSSProperties.getBucketName();
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();
        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKrySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

这四个参数就是获取自己创建的bucket空间的四个要素

//获取阿里云OSS的配置参数
String endpoint = aliOSSProperties.getEndpoint();
String accessKeyId = aliOSSProperties.getAccessKeyId();
String accessKrySecret = aliOSSProperties.getAccessKeySecret();
String bucketName = aliOSSProperties.getBucketName();

我是把这个四个要素放在了.yml的配置文件当中并通过:

@Data
@Component//注入到IDC中
@ConfigurationProperties(prefix = "aliyun.oss")//和配置文件里面的aliyun.oss下的配置信息注入进来
public class AliOSSProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

}

这个类进行调用。

.yml配置文件:

#阿里云OSS配置
aliyun:
  oss:
    endpoint: 
    accessKeyId:
    accessKeySecret:
    bucketName:

(QwQ)最后一步就是创建一个文件上传的接口:

@Slf4j
@RestController
public class uploadController {
    @Autowired
    private AliOSSUtils aliOSSUtils;
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws Exception{
        log.info("文件上传的原始文件名:{}",image.getOriginalFilename());
        String url = aliOSSUtils.upload(image);
        log.info("文件上传之后返回的文件url:{}",url);
        return Result.success(url);
    }
}