前言
文件上传是一个项目中非常常见的功能。其有很多的实现的方式,如上传到服务器,上传到项目路径下,上传到云服务器如阿里云,腾讯云等。但是如果上传到本地会因为项目文件的移动而导致文件丢失,也会收到本地内存大小的限制。所以很多企业会采用将文件上传到云服务器的方式保存文件。下面就为大家介绍将文件上传到阿里云oss的代码实现。
实现步骤
1. 登录进入阿里云官网
网址:https://www.aliyun.com/
2.进入对象存储oss页面
还没有开通点击“立即开通”,已开通点击“管理控制台”
3.创建Bucket
按下图选择即可
4.查看bucket列表
创建成功后即可看到自己的bucket列表
5.创建AccessKey
点击头像进入AccessKey管理,点击“创建AccessKey”按钮即可
6.编写代码
以上均是准备工作,下面我们使用spring boot框架将文件上传到阿里云oss。
1.引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
2.controller代码
//上传头像的方法
@PostMapping("/uploadOssFile")
public R uploadOssFile(MultipartFile file){
//获取上传文件MultipartFile
//返回上传到oss的路径
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
3.service代码
public String uploadFileAvatar(MultipartFile file) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
InputStream inputStream = null;
try {
//获取文件流
inputStream = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
//获取文件名称
String filename = file.getOriginalFilename();
//1.在文件名称中添加随机唯一的值
String uuid = UUID.randomUUID().toString().replaceAll("-","");
filename = uuid+filename;
//2.把文件按日期分类
String datePath = new DateTime().toString("yyyy/MM/dd");
filename = datePath +"/"+filename;
//调用OSS方法实现上传
ossClient.putObject(bucketName, filename, inputStream);
ossClient.shutdown();
//把上传之后的文件路径返回
//需要把上传到阿里云oss路径手动拼接出来
//路径规则:https://edu-cgq.oss-cn-chengdu.aliyuncs.com/QQ%E5%9B%BE%E7%89%8720200502111905.jpg
String url = "https://"+bucketName+"."+endpoint+"/"+filename;
return url;
}
7.测试
1.使用postman访问接口地址
2.进入bucket查看文件是否上传成功
至此,文件上传成功。