阿里云oss
进入阿里云官网,找到oss服务
开通好oss后进入管理控制台,点击创建bucket
创建bucket,如果我们不经常使用,哪存储类型选择低频访问存储
然后就有了bucket实例
如果要用Java来对oss进行操控,就要先生存秘钥
点击创建AccessKey
用Java来对sss进行文件上传
可以参考官网给的快速开始
[https://help.aliyun.com/document_detail/32008.html?spm=a2c4g.11186623.6.929.64544697wVAdJ5]:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
<!--日期工具依赖-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
配置配置文件
# 服务端口
server.port=8002
# 服务名
spring.application.name=service-oss
# 环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=选择服务器的地域名字 # 例如oss-cn-chengdu.aliyuncs.com
aliyun.oss.file.keyid=自己的bucket ID
aliyun.oss.file.keysecret=AccessKey秘钥
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=自己创建的bucket名字
提示:如果自己的这个上传项目被父项目导入了数据库相关依赖可以在启动类注解上加入这段代码
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//由于导入了数据库依赖,这个值有上传到oss,为了不报错
// 1 加上数据库配置,但没必要
// 2.在启动注解上加exclude = DataSourceAutoConfiguration.class, 意思是:排除数据源自动配置类
通过一个工具类去获取配置里面的阿里云oss信息 在spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。
为了将配置的信息可以外部访问
@Component
public class ConstandPropertiesUtils 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 ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
在业务层实现文件的上传,官方给出的对于"上传文件流"的代码为:
官网还给出各种上传方式,选择合适的
[]: https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.954.1d3f4697BxqmeN
// 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);
// 关闭OSSClient。
ossClient.shutdown()
根据我们自己的需要在service层给出一定修改.有两种方式获得application.properties的参数
1.通过前面写的工具类来获得参数,这样可以在方法里面对参数进行赋值
@Override
public String uploadFileAvatar(MultipartFile file) {
//自己bucket的基本信息这是一种方法
String endpoint = ConstandPropertiesUtils.END_POINT;
String accessKeyId = ConstandPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstandPropertiesUtils.ACCESS_KEY_SECRET;
String BucketName = ConstandPropertiesUtils.BUCKET_NAME;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
try {
InputStream inputStream = file.getInputStream();
//获取文件名称
String fileName = file.getOriginalFilename();
//1.在文件名称中添加随机的唯一的值
String uuid= UUID.randomUUID().toString().replaceAll("-","");
fileName=uuid+fileName;
//2.在文件安装日期进行分类
//获取当前的日期 通过joda-time时间工具类,获取时间
String date = new DateTime().toString("yyyy/MM/dd");
//拼接,为了让文件在oss里面安装时间进行分类
fileName=date+"/"+fileName;
//第一个参数 Bucket名称
//第二个参数 上传到oss文件路径和文件名称
//第三个参数 上传的文件输入流
ossClient.putObject(BucketName, fileName, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//上传的阿里云oss的路径根据里面的实例手动拼接出来
String url = "https://" + BucketName + "." + endpoint+"/"+fileName;
return url;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
2.通过@Value进行赋值,但必须交给spring管理才可以,这要将application.properties里面的参数配置到这个类的属性中
@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;
@Override
public String uploadFileAvatar(MultipartFile file) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
try {
InputStream inputStream = file.getInputStream();
//获取文件名称
String fileName = file.getOriginalFilename();
//1.在文件名称中添加随机的唯一的值
String uuid= UUID.randomUUID().toString().replaceAll("-","");
fileName=uuid+fileName;
//2.在文件安装日期进行分类
//获取当前的日期
String date = new DateTime().toString("yyyy/MM/dd");
//拼接
fileName=date+"/"+fileName;
//第一个参数 Bucket名称
//第二个参数 上传到oss文件路径和文件名称
//第三个参数 上传的文件输入流
ossClient.putObject(BucketName, fileName, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//上传的阿里云oss的路径手动拼接出来
String url = "https://" + BucketName + "." + endpoint+"/"+fileName;
return url;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
最后完善控制层;
最后用swagger进行测试
最后可以在阿里云oss控制台中发现自己上传的图片,并按照日期分类
(IOException e) {
e.printStackTrace();
}
return null;
}
最后完善控制层;
最后用swagger进行测试
最后可以在阿里云oss控制台中发现自己上传的图片,并按照日期分类