1. 背景
创建用户时需要进行头像的上传,可以通过使用阿里云OSS的SDK来实现云文件的上传及读取。
1.1. 阿里云OSS介绍
- 对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务设计可用性不低于99.995%。
- OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- 提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景:
2. 前期准备
- 已注册阿里云账号。
- 已个人实名认证或企业实名认证。
- 已开通OSS服务。
- 已创建RAM用户作为账号管理员。
2.1. 创建Bukket
控制台搜索对象存储OSS
进入。
左侧导航栏选择Bucket列表。
创建Bucket需要记住Endpoint以及Bucket
名称,以便后续在配置文件中使用,Endpoint可以在bucket详情中点击概览进行查看。
2.2. 创建AccessKeyId以及AccessSecret
创建认证私钥可以通过多种方式,这里通过官方开发文档中的ROS脚本进行快速创建
。在资源编排ROS控制台的创建资源栈页面的安全确认下,勾选确认,然后单击创建。
到现在一共得到了四个参数,分别为Endpoint、Bucket名称、AccessKeyId、AccessKeySecret。
2.3. 注意事项
Bukket创建完成后默认为阻止公共进行访问
,若需要自己的本地前端访问数据,可以将阻止公共读关闭,并授权ACL为公共读
。
3. 代码实现
3.1. 配置文件
本文后端使用的是SpringBoot框架,首先创建阿里云的配置文件。
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; @Data @Configuration @ConfigurationProperties(prefix = "aliyun.oss") public class AliOSSProperties { // 阿里云OSS private String endpoint; // 阿里云账号AccessKey拥有所有API的访问权限 private String accessKeyId; // 阿里云账号AccessKey的SecretKey private String accessKeySecret; // 阿里云OSS存储空间名称 private String bucketName; }
application.yml配置如下:
aliyun: oss: endpoint: 前面提到的Endpoint bucket-name: 你创建的Bukket名称 access-key-id: 用户授权id access-key-secret: 用户授权秘钥
3.2. 定义上传工具类
import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSClientBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.util.UUID; @Component public class AliOSSUpload { @Autowired private AliOSSProperties aliOSSProperties; /** * aliyun文件上传 * @param multipartFile * @return */ public String uploadFile(MultipartFile multipartFile) throws Exception{ //获取文件输入流 InputStream inputStream = multipartFile.getInputStream(); //创建文件名 String fileName = UUID.randomUUID() + multipartFile.getOriginalFilename(); //上传文件到OSS OSS ossClient = new OSSClientBuilder().build( aliOSSProperties.getEndpoint(), aliOSSProperties.getAccessKeyId(), aliOSSProperties.getAccessKeySecret() ); ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream); //文件访问路径 String url = "https://" + aliOSSProperties.getBucketName() + "." + aliOSSProperties.getEndpoint() + "/" + fileName; //关闭OSSClient ossClient.shutdown(); //返回上传路径 return url; } }