20200802技术分享-阿里云OSS

2020/08/02 Notes

什么是阿里云OSS

OSS,即bject Storage Service。阿里云提供的云存储服务。具有高可用性(≥99.995%)和高持久性(≥99.9999999999%)。

主要应用场景

  • 图片和音视频等资源的海量存储

各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。OSS支持流式写入和文件写入两种方式。

  • 静态资源和动态资源的分离

利用BGP带宽,OSS可以实现超低延时的数据直接下载。OSS也可以配合阿里云CDN加速服务,为图片、音视频、移动应用的更新分发提供最佳体验。

  • 云端数据处理

上传文件到OSS后,可以配合媒体处理服务(转换媒体格式、视频编辑、视频内容保护、智能审核等)和图片处理服务(缩放、裁剪、加水印等)进行云端的数据处理。

基本概念

存储空间(Bucket)

存储空间是用户用于存储对象(Object)的容器(逻辑划分),所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

创建存储空间

对象(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。

ObjectKey

向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如填写为abc/efg/123.jpg。在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。

Region(地域)

Region表示OSS的数据中心所在物理位置。

**Endpoint(访问域名)

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。例如杭州Region的外网Endpoint是oss-cn-hangzhou.aliyuncs.com,内网Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。

AccessKey(访问密钥)

AccessKey简称AK,指的是访问身份验证中用到的AccessKeyId和AccessKeySecret。OSS通过使用AccessKeyId和AccessKeySecret对称加密的方法来验证某个请求的发送者身份。AccessKeyId用于标识用户;AccessKeySecret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。

功能概述

存储空间管理

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建CreateBucketRequest对象。
CreateBucketRequest createBucketRequest = new CreateBucketRequest("<yourBucketName>");

// 创建存储空间。
ossClient.createBucket(createBucketRequest);

// 列举存储空间。
// 判断存储空间是否存在
// 获取存储空间的信息(Info),包括存储空间所在地域、创建日期、权限信息等。
// 设置Bucket标签
// 删除Bucket标签 
// ……

// 关闭OSSClient。
ossClient.shutdown();

文件上传

  • 简单上传

简单上传指的是使用OSS API中的PutObject方法上传单个文件(Object)。简单上传分为流式上传和文件上传。流式上传使用InputStream作为文件的数据源。文件上传使用本地文件作为OSS文件的数据源。

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);


/////////////////文件上传

// 上传本地文件
PutObjectRequest putObjectRequest = new PutObjectRequest("<yourBucketName>", "<yourObjectName>", new File("<yourLocalFile>"));
ossClient.putObject(putObjectRequest);

/////////////////流式上传

//上传文件流
//InputStream inputStream = new FileInputStream("<yourlocalFile>");
//ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);

//上传网络流
//InputStream inputStream = new URL("https://www.aliyun.com/").openStream();
//ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);

// 上传Byte数组。
byte[] content = "Hello OSS".getBytes();
ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content));
// ……

  • 表单上传

使用OSS API中的PostObject请求来完成Object的上传,上传的Object不能超过5GB。

表单上传

从流程上来说,使用表单上传,少了一步转发流程,更加方便。

从架构上来说,原来的上传都统一走网站服务器,上传量过大时,需要扩容网站服务器。采用表单上传后,直接从客户端上传数据到OSS,上传量过大时,压力都在OSS上,由OSS来保障服务质量。

  • 分片上传和断点续传

分片上传(Multipart Upload)和断点续传功能,可以将要上传的文件分成多个数据块(OSS里又称之为Part)来分别上传,上传完成之后再调用OSS的接口将这些Part组合成一个Object来达到断点续传的效果。

当使用简单上传(PutObject)功能来上传较大的文件到OSS的时候,如果上传的过程中出现了网络错误,那么此次上传失败,重试必须从文件起始位置上传。针对这种情况,您可以使用分片上传来达到断点续传的效果。

  • 追加上传

追加上传指的是使用OSS API中的AppendObject在已上传的Appendable Object类型文件后面直接追加内容。

AppendObject接口用于以追加写的方式上传文件(Object)。通过AppendObject操作创建的Object类型为Appendable Object,而通过PutObject上传的Object是Normal Object。

之前提到的上传方式,比如简单上传,表单上传,断点续传上传等,创建的Object都是Normal类型,这种Object在上传结束之后内容就是固定的,只能读取,不能修改。如果Object内容发生了改变,只能重新上传同名的Object来覆盖之前的内容,这也是OSS和普通文件系统使用的一个重大区别。

OSS支持使用RTMP协议推送H264编码的视频流和AAC编码的音频流到OSS。推送到OSS的音视频数据可以点播播放;在对延迟不敏感的应用场景,也可以做直播用途。当然阿里云也提供了专门的视频直播服务

阿里云推流服务

简单下载

外网下载 单独计费

数据安全

云端数据处理

实践

Search

    Post Directory