1.配置引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
2.配置yml
#阿里云文件存储
aliyun:
oss:
file:
endpoint: ********** # oss对外服务的访问域名
keyid: ***************** # 访问身份验证中用到用户标识
keysecret: ************** # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
bucketname:********** # oss的存储空间
3.配置生效
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//当项目启动,spring接口,spring加载之后,执行接口的方法
@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;
}
}
4.根据阿里文档撰写代码,上传文件到oss
//文件上传到oss
@Override
public String uploadFile(MultipartFile file) {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = ConstantPropertiesUtils.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantPropertiesUtils.KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;
// 填写Bucket名称,例如examplebucket。
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "file";
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取文件的输入流
InputStream inputStream = file.getInputStream();
//获取文件名称
String uuid = UUID.randomUUID().toString().replace("-", "");
String fileName = file.getOriginalFilename();
//调用oss方法实现上传
//第一个参数:BucketName
//第二个参数 上传文件路径和名称
//第三个参数 上传文件输入流
ossClient.putObject(bucketName, objectName+"/"+uuid+fileName, inputStream);
//关闭ossClient
ossClient.shutdown();
//返回上传路径
String url = "https://"+bucketName+"."+endpoint+"/"+objectName+"/"+uuid+fileName;
return url;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}