本笔记内容为尚硅谷谷粒商城整合阿里云OSS对象存储部分
目录
一 、简介
二、云存储开通与使用
1、开通阿里云对象存储服务
2、创建bucket
3、创建子用户(获取密钥访问OSS服务器)
给该子账户添加权限
4、阿里云对象存储上传方式
三、整合
1、引用SDK
2、测试文件存储
四、SpringCloudAlibaba OSS
1、引入oss-starter依赖
2、配置key、endpoint相关信息
3、编写文件上传代码就不用再进行相关配置了
一、简介
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
二、云存储开通与使用
1、开通阿里云对象存储服务
对象存储 OSS_云存储服务_企业数据管理_存储-阿里云
2、创建bucket
进入OSS管理控制台,创建一个Bucket(一般一个项目都会创建一个bucke)
API 文档 对象存储 OSS (aliyun.com)
3、创建子用户(获取密钥访问OSS服务器)
创建完成之后记得把AccessKey ID和AccessKey Secret拷贝到本地文本备用
给该子账户添加权限
4、阿里云对象存储上传方式
1.普通上传
2.服务端签名后直传
三、整合
1、引用SDK
<!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
2、测试文件存储
@Test
public void testUpload(){
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "oss-cn-beijing.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "xxx";
String accessKeySecret = "xxx";
// 填写Bucket名称,例如examplebucket。
String bucketName = "gulimall-zuhao";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "bj.png";
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
String filePath= "C:\\Users\\86137\\Pictures\\CSDN\\bj.png";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);*/
//OSS ossClient = new OSSClientBuilder();
try {
InputStream inputStream = new FileInputStream("C:\\Users\\86137\\Pictures\\CSDN\\bj.png");
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest("gulimall-zuhao", "bj1.png", inputStream);
// 设置该属性可以返回response。如果不设置,则返回的response为空。
putObjectRequest.setProcess("true");
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 如果上传成功,则返回200。
System.out.println(result.getResponse().getStatusCode());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
运行然后到回到OSS控制台Bucket里的文件泪飙发现刚上传的图片
四、SpringCloudAlibaba OSS
原生的SDK有点过于麻烦,这里我们直接使用 SpringCloud Alibaba 对象存储
1、引入oss-starter依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
2、配置key、endpoint相关信息
spring:
cloud:
alicloud:
access-key: xxxx
secret-key: xxxx
oss:
endpoint: oss-cn-beijing.aliyuncs.com
3、编写文件上传代码就不用再进行相关配置了
使用OSSClient进行相关操作
@RunWith(SpringRunner.class)
@SpringBootTest
class GulimallProductApplicationTests {
@Resource
private OSS ossClient;
@Value("${spring.cloud.alicloud.oss.endpoint}")
private String endpoint;
@Value("${spring.cloud.alicloud.access-key}")
private String accessKeyId;
@Test
public void testUpload(){
/*// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "oss-cn-beijing.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "xxx";
String accessKeySecret = "xxx";
// 填写Bucket名称,例如examplebucket。
String bucketName = "gulimall-zuhao";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "bj.png";
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
String filePath= "C:\\Users\\86137\\Pictures\\CSDN\\bj.png";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);*/
//OSS ossClient = new OSSClientBuilder();
try {
InputStream inputStream = new FileInputStream("C:\\Users\\86137\\Pictures\\CSDN\\bj.png");
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest("gulimall-zuhao", "bj1.png", inputStream);
// 设置该属性可以返回response。如果不设置,则返回的response为空。
putObjectRequest.setProcess("true");
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 如果上传成功,则返回200。
System.out.println(result.getResponse().getStatusCode());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
System.out.println("上传完成!。。。");
}
}
运行
注意:@RunWith(SpringRunner.class)是运行此方法报空指针异常时在类上加上
结束!