阿里云OSS对象存储功能的实现步骤 + 配置文件的编写
阿里云OSS对象存储功能的实现步骤
首先 -> 注册阿里云 -> 开通OSS对象存储服务 -> 创建Bucket -> 创建AccessKey
1. 获取四个参数编写到yml文件 参考配置文件1.
aliyun:
oss:
endpoint: https://oss-cn-hangzhou.aliyuncs.com
access-key-id: LTAI5tS9qa9H2uftNY
access-key-secret: VNEIKZfxBpa4HO9YLDx2i
bucket-name: big-event993
2. 编写配置类
AliyunOssConfig
package com.zxd.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @Auther: Zxd
* @Date: 2024/07/12 20:58
* @Description:
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
3. 编写Oss工具类
AliOssUtil
package com.zxd.utils;
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.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.zxd.config.AliyunOssConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.InputStream;
/**
* @Auther: Zxd
* @Date: 2024/07/12 14:47
* @Description: 阿里云oss工具类
*/
@Component
public class AliOssUtil {
@Autowired
private AliyunOssConfig aliyunOssConfig;
public String uploadFile(String objectName, InputStream in) throws Exception {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
String url = "";
try {
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(aliyunOssConfig.getBucketName(), objectName, in);
// 上传文件。
PutObjectResult result = ossClient.putObject(putObjectRequest);
System.out.println("result:" + result);
// url组成: https://bucket名称.区域节点/objectName
url = "https://" + aliyunOssConfig.getBucketName() + "." + aliyunOssConfig.getEndpoint().substring(aliyunOssConfig.getEndpoint().lastIndexOf("/") + 1) + "/" + objectName;
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return url;
}
}
4. 图片上传controller层示例
FileUploadController
package com.zxd.controller;
import com.zxd.pojo.ApiResult;
import com.zxd.utils.AliOssUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;
/**
* @Auther: Zxd
* @Date: 2024/07/12 10:15
* @Description:
*/
@RestController
@Tag(name = "文件上传")
public class FileUploadController {
@Autowired
private AliOssUtil aliOssUtil;
@PostMapping("/upload")
@Operation(summary = "图片上传")
public ApiResult<String> upload(@RequestParam("file") MultipartFile file) throws Exception {
//把文件内容存储到本地磁盘上
String originalFilename = file.getOriginalFilename();
//保证文件名唯一性,从而防止文件覆盖 originalFilename.lastIndexOf(".") -> 找到文件名中最后一个"."的位置
// originalFilename.substring -> 从这个位置开始截取,得到文件的扩展名
String fileName = UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));
//调用工具类上传到阿里云并返回url地址
String url = aliOssUtil.uploadFile(fileName, file.getInputStream());
return ApiResult.success(url);
}
}
参考链接:https://www.bilibili.com/video/BV14z4y1N7pg?p=36&vd_source=714b8a2323b700f15d0b7b31226f1d5d
配置文件的编写
1. 在application.yml里面配置需要的参数
2. pom.xml文件引入配置文件依赖 不然 @ConfigurationProperties(prefix = "aliyun.oss") 会报红不生效
<!-- 配置生成配置文件处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3. 使用配置文件里面的信息
方法一:适用于参数多 使用实体类和 @Autowired 引入配置类参数
1)编写config类:注意 @ConfigurationProperties(prefix = "aliyun.oss") 要与第一步yml文件里面的路径匹配
2)使用@Autowired注解,哪里需要就注入引用


方法二:适用于参数少直接使用 @Value("${aliyun.oss.endpoint}") 引入配置类参数(需要注意路径)
