阿里oss
模拟利用OSS存储用户头像
1、使用对象存储OSS
-
创建Bucket
-
模拟后台上传
使用java操作阿里云oss
- 创建操作阿里云oss许可证(id和密钥)
- 点击右上角头像-> accesskey管理 -> 创建AccessKey获取ID,密钥
https://help.aliyun.com/document_detail/32012.html
// 引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
//设置properties
#阿里云oss
#不同服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=LTAI5tJFyFvVmK5pz1iLZNWF
aliyun.oss.file.keysecret=f5P1jlN9Jlqje4EpnHZum0Gv4tQufA
#可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=photo101
@Component
public class ConstantPropertiesUtils implements InitializingBean{
// 读取配置文件内容
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
// 定义公开静态常量
public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
public class OssController {
@Autowired
private OssService ossService;
@PostMapping("/")
public RespBean uploadOssFile(MultipartFile file){
// 获取上传文件 MultipartFile
// 返回上传到OSS的路径
String url = ossService.updateloadFileAvatar(file);
return RespBean.success("url",url);
}
@Service
public class OssServiceImpl implements OssService {
/**
* 上传头像到oss
* @param file
* @return
*/
@Override
public String updateloadFileAvatar(MultipartFile file) {
String endpoint = ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
String url = "";
try {
// 获取流
InputStream inputStream = file.getInputStream();
// 获取文件名称
String filename = file.getOriginalFilename();
//1. 在文件名称里面添加随机的唯一的值
String uuid = UUID.randomUUID().toString().replaceAll("-","");
filename = uuid + filename;
//2. 把文件按照日期进行分类
// 2022/04/04/01.jpg
// 获取当前日期
String datePath = new DateTime().toString("yyyy/MM/dd");
// 拼接
filename = datePath+"/"+filename;
// 创建PutObject请求。
// 第二个参数 上传到oss文件路径和文件名称 /aa/bb/1.jpg
ossClient.putObject(bucketName, filename, inputStream);
// 把上传之后文件路径返回
// 需要把上传到阿里云oss路径手动拼接出来
// https://photo101.oss-cn-beijing.aliyuncs.com/toux.webp
url = "https://"+bucketName+"."+endpoint+"/"+filename;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return url;
}
}