> 文章列表 > 【谷粒商城之整合阿里云OSS对象存储】

【谷粒商城之整合阿里云OSS对象存储】

【谷粒商城之整合阿里云OSS对象存储】

本笔记内容为尚硅谷谷粒商城整合阿里云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、测试文件存储

@Testpublic 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: xxxxsecret-key: xxxxoss:endpoint: oss-cn-beijing.aliyuncs.com

3、编写文件上传代码就不用再进行相关配置了

使用OSSClient进行相关操作

@RunWith(SpringRunner.class)
@SpringBootTest
class GulimallProductApplicationTests {@Resourceprivate OSS ossClient;@Value("${spring.cloud.alicloud.oss.endpoint}")private String endpoint;@Value("${spring.cloud.alicloud.access-key}")private String accessKeyId;@Testpublic 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)是运行此方法报空指针异常时在类上加上

结束!