阿里云对象存储OSS的开通和使用
前言:
本博客的实战部分是针对我做的SpringBoot+Vue在线教育项目而写的。
一、开通阿里云OSS
1 进入阿里云官网,找到阿里云对象存储OSS入口
2 点击对象存储OSS
3 点击开通服务
4 同意协议,点击立即开通
5 点击管理控制台
6 点击创建Bucket
7 创建Bucket
8 上传文件
9 随便上传一张图片
10 现在可以查看图片,可以看到URL信息
二、开通AccessKey
1 点击AccessKey
2 继续使用AccessKey
3 手机验证
4 可以看到秘钥信息
5 点击保存AK信息,会自动下载一个csv文件
6 点击学习路径
7 点击Java SDK
8 可以查看阿里云OSS的官方文档
三、项目实战 使用Java SDK操作OSS
结合我的Springboot+Vue在线教育项目,整合阿里云OSS
1 首先需要引入阿里云OSS相关依赖,可参考官方文档
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.oss.version}</version>
</dependency>
2 在service层创建service_oss模块
3 在pom.xml中添加依赖
<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>
4 编写配置文件application.properties
注意:OSS相关配置前后不能加空格
# 端口号
server.port=8002
# 服务名
spring.application.name=service-oss
# 环境设置
spring.profiles.active=dev
# 集成阿里云OSS
aliyun.oss.file.endpoint=
aliyun.oss.file.keyid=
aliyun.oss.file.keysecret=
# bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=
5 写启动类 OssApplication.java
注意: 要排除掉数据源加载,需要在SpringBootApplication上增加execude=DataSourceAutoConfiguration.class
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//不加载数据源
@ComponentScan(basePackages = {"com.atguigu"})
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class,args);
}
}
6 写配置工具类
注意:该工具类需要加上Component注解,且需要实现InitializingBean接口,重写afterPropertiesSet()方法,目的是利用定义的私有属性。
//当项目一启动,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 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;
}
}
7 service层
可以查看阿里云OSS官方文档,进行修改
OssService.java
public interface OssService {
//上传头像到OSS
String uploadOssFileAvatar(MultipartFile file);
}
OssServiceImpl.java
注意:为什么要返回上传对象最终的url,因为controller要将该url作为响应体信息传入。阿里云OSS官方文档并没有发现直接获取该url的方法,需要手动拼接字符串。
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadOssFileAvatar(MultipartFile file) {
//通过工具类获取
String endpoint = ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
// 上传文件流。
InputStream inputStream = null;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 获取上传文件输入流
inputStream = file.getInputStream();
// 获取文件名称
String filename = file.getOriginalFilename();
// 调用oss方法实现上传
// 第一个参数: Bucket名称 第二个参数: 上传到oss文件路径和文件名称 /aa/bb/1.jpg 第三个参数: 上传文件的输入流
ossClient.putObject(bucketName, filename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
// 把上传之后的文件路径返回
// https://edu-0912.oss-cn-beijing.aliyuncs.com/4c480a7029cbea756e87d34940654825.jpg
return "https://" + bucketName + "." + endpoint + "/" + filename;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
8 controller
注意:需要在controller上添加@CrossOrign注解,开放跨域请求
@RestController
@RequestMapping(path = "/eduoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
//上传头像的方法
@PostMapping("/uploadOssFile")
public R uploadOssFileAvatar(MultipartFile file){
//获取上传的文件 MultipartFile
String url = ossService.uploadOssFileAvatar(file);
return R.ok().data("url",url);
}
}
9 启动工程,Swagger测试
进入swagger,可以开始调试了
10 上传文件
11 OSS后台查看,可以发现多了一张图片
12 项目结构
service_oss模块的作用是给讲师添加头像
结语:
水平有限,仅供参考,若有纰漏,希望随时指出!