Oss是阿里的一个云存储服务,可以上传和下载文件。
我们想使用,就要先加入依赖pom:
<dependencies>
<!-- 阿里云oss依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!-- 日期工具栏依赖 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
然后去它的官网查看api,看看是如何使用的:
上传文件流
以下代码用于上传文件流:
我们可以看出,我们总共需要四个值,分别是:
endpoint:域名
accessKeyId:你的账号
accessKeySecret: 你的密码
Bucketname: 分组名字
这四个数值由于不是固定的,所以我们可以将这些值写道yml配置文件中,防止硬编码,后期更好的维护。
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
InputStream inputStream = new FileInputStream("<yourlocalFile>");
ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);
里边三个参数的含义: 你的组名,你上传到oss后的文件名,文件流
// 关闭OSSClient。
ossClient.shutdown();
将需要的值配置到yml文件中:
注意这个aliyun oss file 一系列的结构是我们自己定义的,需要用@Value注解注入到oss上传文件类中。
# 密钥 id bucket
server:
port: 7003
spring:
application:
name: oss-service
#阿里云oss
aliyun:
oss:
file:
endpoint: oss-cn-beijing.aliyuncs.com
keyid: LTAI4GAfX5FQh1euXmfdyMv
keysecret: hbRPRzAb7JLGkF9UpavjJMQyQGqIUE
bucketname: jkt-oss
主类:
其实最主要的操作也就四个:
1、创建oss对象
2、获取文件流
3、给上传后的文件赋予名字---防止文件名字相同
4、调用oss对象的putObject方法,进行上传
@Service
public class OssServiceImpl implements OssService {
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String accessKeyId;
@Value("${aliyun.oss.file.keysecret}")
private String accessKeySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketname;
// 图片上
public String uploadImage(MultipartFile file) {
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
InputStream inputStream = file.getInputStream();
String filePath = new DateTime().toString("yyyy/MM/dd");
// 文件名 uuid.扩展名
String original = file.getOriginalFilename(); // 获取上传的文件名 // a.jpg
String fileName = UUID.randomUUID().toString(); // 生成一串随机数
String fileType = original.substring(original.lastIndexOf(".")); // 截取字符串 截取到jpg
String newName = fileName + fileType;
String fileUrl = filePath + "/" + newName;
// 上传文件。
ossClient.putObject(bucketname, fileUrl, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
return "http://" + bucketname + "." + endpoint + "/" + fileUrl;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}