阿里云存储OSS《快速使用》
为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。 本文主要为快速使用OSS的简介。
一、快速使用
1、注册账号并实名验证
2、搜索找到对象存储OSS,开通OSS服务
3、查看官方文档
二、具体使用
1、 注册阿里云账号和实名认证
(1)网址:https://www.aliyun.com/
(2)可以使用支付宝注册,现在还提供了钉钉注册方式
(3)注册成功后需要实名认证才能开通“对象存储OSS”服务
2、开通“对象存储OSS”服务
直接搜索找到【对象存储OSS】,开通OSS服务
3、控制台的使用
(1)开通服务后,进入控制台
(2)手动创建bucket
1)通过【创建Bucket】进行新建
bucket名称:自定义;
地域:系统会自动选择最优的,默认即可;
同城冗余存储:关闭,选择启动是要收费的;
读写权限:根据需要来选择;这里会为了后续讲解,会选择“公共读”
如果只是学习,基本上都默认即可
2)点击确定,这样我们就手动创建好了一个bucket
3)这时,我们可以试着上传文件了,阿里云是提供了两种访问方式,一种是后台管理系统,一种是API
当然,在日常的开发中,是使用api的,因为你不可能叫用户打开阿里云去上传文件
3)如果想删除bucket
(3)权限的设置
1)因为我们前面创建选择的读写权限是“公共读”,所以后续我们是需要设置AccessKey的
2)进入AccessKey 管理
3)在使用AccessKey时,我们通常的做法是创建子用户key,不同的服务开通不同的子key,这样会更安全
4)开通子用户AccessKey
①做编程的要勾上Open API...
②验证
③创建子用户成功
注意:这时我们最后把key账号和密钥复制下来,找个地方存好备用,因为后面会直接给你隐藏掉了
或者直接下载下来也可以
④最后为用户添加权限
如果没有添加权限,后面开发时,就会经常报错“没有权限”
如果是平时的简单使用,到这里就可以了,如果需要做开发的,下面才是重要的。
4、查阅阿里云API(最核心)
做开发的怎么能离开开发文档呢
(1)进入oss学习路径
(2)根据自己的开发语言选择SDK
因为我是写Java的,所以用Java SDK
(3)Java SDK概要
从Java SDK进来后,可以看到里面有着方方面面的介绍
5、一个简单的示例(Java创建bucket)
以下都可以通过查阅官方文档实现
(1)检查自己的jdk版本,要求是1.7及以上版本
(2)创建一个Maven项目
(2)安装sdk
这里是使用的是Maven项目,所以直接安装依赖即可
<dependencies>
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
然后等待下载好依赖,即可做一些简单的操作
(3)Java创建bucket
①查阅官方文档-创建存储空间
②复制示例代码,然后根据之前保存的我们自己的AccessKey来修改即可,具体如下:
主要修改这几个即可 String endpoint String accessKeyId String accessKeySecret String bucketName
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CreateBucketRequest;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 创建CreateBucketRequest对象。
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
// 如果创建存储空间的同时需要指定存储类型和数据容灾类型, 请参考如下代码。
// 此处以设置存储空间的存储类型为标准存储为例介绍。
//createBucketRequest.setStorageClass(StorageClass.Standard);
// 数据容灾类型默认为本地冗余存储,即DataRedundancyType.LRS。如果需要设置数据容灾类型为同城冗余存储,请设置为DataRedundancyType.ZRS。
//createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS);
// 设置存储空间的权限为公共读,默认为私有。
//createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
// 创建存储空间。
ossClient.createBucket(createBucketRequest);
} 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());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
②判断bucket是否存在
如果有以下报错就是bucket已经存在了
<Error>
<Code>BucketAlreadyExists</Code>
<Message>The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.</Message>
<RequestId>623436******23630228039</RequestId>
<HostId>xbao-1.oss-cn-beijing.aliyuncs.com</HostId>
<BucketName>xbao-1</BucketName>
</Error>
③设置读写权限
默认创建出来的是“私有”项目,而我们想要的是“公共读”,所以就需要设置读写权限
(4)在实际开发中的文件上传(springcloud)
1)在中application.yml的配置
aliyun:
oss:
endpoint: 你的endponit
keyid: 你的阿里云keyid
keysecret: 你的阿里云keysecret
bucketname: 你的阿里云bucket
2)定义工具类从配置文件中读取常量
@Data:lombok的注解
@Component: 加载到spring中
@ConfigurationProperties(prefix="aliyun.oss"):读取前缀是aliyun.oss的配置,根据名字endpoint、keyid等匹配赋值常量
@Data
@Component
@ConfigurationProperties(prefix="aliyun.oss")
public class OssProperties {
private String endpoint;
private String keyid;
private String keysecret;
private String bucketname;
}
3)文件上传的业务接口
public interface FileService {
/**
* 阿里云oss文件上传
* @param inputStream 输入流
* @param module 文件夹名称
* @param originalFilename 原始文件名称
* @return 文件在oss服务器上的url地址
*/
String upload(InputStream inputStream, String module, String originalFilename);
}
@Service
public class FileServiceImpl implements FileService {
@Autowired
private OssProperties ossProperties;
@Override
public String upload(InputStream inputStream, String module, String originalFilename) {
// 读取配置
String endpoint = ossProperties.getEndpoint();
String keyid = ossProperties.getKeyid();
String keysecret = ossProperties.getKeysecret();
String bucketname = ossProperties.getBucketname();
//判断oss实例是否存在:如果不存在则创建,如果存在则获取
OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keysecret);
if (!ossClient.doesBucketExist(bucketname)) {
//创建bucket
ossClient.createBucket(bucketname);
//设置oss实例的访问权限:公共读
ossClient.setBucketAcl(bucketname, CannedAccessControlList.PublicRead);
}
//构建日期路径
String folder = new DateTime().toString("yyyy/MM/dd");
//文件名:uuid.扩展名
String fileName = UUID.randomUUID().toString();
String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
String key = module + "/" + folder + "/" + fileName + fileExtension;
//文件上传至阿里云
ossClient.putObject(ossProperties.getBucketname(), key, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//返回url地址
return "https://" + bucketname + "." + endpoint + "/" + key;
}
}
具体需要什么,查阅官方文档很快就能找到demo。
更多推荐
所有评论(0)