一、阿里云OSS云存储简介

1、什么是阿里云oss云存储

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于 99.9999999999%(12 个 9),服务设计可用性(或业务连续性)不低于 99.995%。

可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。数据存储到阿里云 OSS 以后,可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)和归档存储(Archive)作为不经常访问数据的存储方式。

OSS 具有与平台无关的 RESTful API 接口,可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

2、OSS与自建存储对比的优势

OSS将文件下载到本地的JAVA代码_字段

3、应用场景

  • 图片和音视频等应用的海量存储
  • OSS将文件下载到本地的JAVA代码_存储空间_02

  • 网页或者移动应用的静态和动态资源分离
  • OSS将文件下载到本地的JAVA代码_存储空间_03

  • 云端数据处理
  • OSS将文件下载到本地的JAVA代码_OSS将文件下载到本地的JAVA代码_04

4、计量计费

阿里云对象存储 OSS 服务费用的各项组成部分及计费方式分为按量计费和包年包月两种。

按量付费:按实际使用量*单价的方式计费,每小时统计前一小时的实际用量并从账户余额中扣除实际消费金额。例如当前时间是 9:30,结算的是 8:00-9:00 产生的费用 。

包年包月:预先购买指定资源包,之后使用资源时,扣除相应的额度。一般情况下,包年包月比按量付费更加优惠。资源包目前仅提供标准(LRS)存储包、低频(LRS)存储包、归档(LRS)存储包、标准
(ZRS)存储包、低频(ZRS)存储包、下行流量包、 回源流量包、传输加速包,可购买地域请参见购买对象存储 OSS 资源包。

这个看一个实际的计费案例即可
https://help.aliyun.com/document_detail/109686.html?spm=a2c4g.11186623.6.562.4bbd7c28AAnl9D

二、OSS云存储基本概念

1、存储空间(Bucket)

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

  • 同一个存储空间的内部是扁平的,没有文件系统目录的概念,所有的对象都直接隶属于其对应的存储空间。
  • 每个用户可以拥有多个存储空间。
  • 存储空间的名称在 OSS 范围内必须是全局唯一的,一旦创建之后无法修改名称。
  • 存储空间内部的对象数目没有限制。

存储空间的命名规范如下:

  • 只能包括小写字母、数字和短横线(-)。
  • 必须以小写字母或者数字开头和结尾。
  • 长度必须在 3–63 字节之间。

2、对象/文件(Object)

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

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,只有通过追加上传的 Object 可以继续通过追加上传写入数据,其他上传方式上传的 Object 内容无法编辑,您可以通过重复上传同名的对
象来覆盖之前的对象。

对象的命名规范如下:

  • 使用 UTF-8 编码。
  • 长度必须在 1–1023 字节之间。
  • 不能以正斜线(/)或者反斜线(\)开头。

3、Region(地域)

Region 表示 OSS 的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建Bucket。一般来说,距离用户更近的 Region 访问速度更快。

Region 是在创建 Bucket 的时候指定的,一旦指定之后就不允许更改。该 Bucket 下所有的 Object 都存储在对应的数据中心,目前不支持 Object 级别的 Region 设置

4、Endpoint(访问域名)

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

5、AccessKey(访问密钥)

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

  • Bucket 的拥有者申请的 AccessKey。
  • 被 Bucket 的拥有者通过 RAM 授权给第三方请求者的 AccessKey。
  • 被 Bucket 的拥有者通过 STS 授权给第三方请求者的 AccessKey
注意:
  可以登录阿里云官网-“用户中心” -“我的帐户” -“安全认证” 获取 Access Key ID 和 Access Key Secret,一个阿里云帐号可以生成 5 对 Access Key ID 和 Access Key Secret。并支持启用/禁用设置。

6、Service

OSS 提供给用户的虚拟存储空间,在这个虚拟空间中,每个用户可拥有一个 到多个 Bucket

三、OSS功能详解

1、基本功能

使用阿里云管理控制台来完成 OSS 基本操作的流程如下:

OSS将文件下载到本地的JAVA代码_字段_05

  1. 开通OSS服务器
    前提条件
    在使用阿里云 OSS 服务之前,请确保您已经注册了阿里云账号并完成实名认证。如果您还没有创建阿里云账号,系统会在您开通 OSS 时提示您注册账号。

操作步骤

  • 登录阿里云官网。
  • 将鼠标移至产品,单击对象存储 OSS,打开 OSS 产品详情页面。
  • 在 OSS 产品详情页,单击立即开通。

OSS将文件下载到本地的JAVA代码_字段_06


开通服务后,在 OSS 产品详情页单击管理控制台直接进入 OSS 管理控制台界面。

您也可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单击左侧的对象存储 OSS 菜单进入 OSS 管理控制台界面。

OSS将文件下载到本地的JAVA代码_OSS将文件下载到本地的JAVA代码_07


OSS将文件下载到本地的JAVA代码_存储空间_08

  1. 创建存储空间
  • 登录OSS管理控制台。
  • 单击Bucket列表,之后单击创建Bucket。
    您也可以单击概览,之后单击右侧的创建Bucket。
  • 在创建Bucket页面配置Bucket参数。
  1. 上传文件
  • 登录OSS管理控制台。
  • 单击Bucket列表,之后单击目标Bucket名称。
  • 单击文件管理 > 上传文件。
  • 在上传文件页面,设置上传文件的参数。
  • 在上传任务页面等待任务完成,之后关闭对话框。
  1. 下载文件
  • 登录OSS管理控制台。
  • 进入目标Bucket。单击Bucket列表,之后单击目标Bucket名称。
  • 单击文件管理页签,您可以进行操作了
  1. 删除文件
  • 登录OSS管理控制台。
  • 进入目标Bucket。单击Bucket列表,之后单击目标Bucket名称。
  • 选择一个或多个文件,选择批量操作 > 删除。您也可以选择目标文件右侧的更多 > 删除来删除单个文件。
  • 在删除文件对话框中,单击确定
  1. 删除存储空间
  • 进入OSS管理控制台界面。
  • 进入目标Bucket,找到删除Bucket按钮。单击基础设置页签,找到Bucket管理区域。3. 单击删除Bucket。
  • 在弹出的对话框中,单击确定。

2、Object外链地址的构成规则

如果一个bucket设置成公开读权限,意味着允许其他用户来访问属于你的object。你的object的外链地址构成规则如下:

http:// <你的bucket名字>.<数据库中心服务域名>/<你的object名字>

OSS将文件下载到本地的JAVA代码_存储空间_09

假设 oss-example 这个 bucket 在青岛数据中心,这个 object 的外链 URL 为:

http://oss-example.oss-cn-qingdao.aliyuncs.com/aliyun-logo.png

用户可以直接该URL链接放入HTML中使用:

<img src="http://oss-example.oss-cn-qingdao.aliyuncs.com/aliyun-logo.png"/>

OSS 的短域名(oss.aliyuncs.com)作为 OSS 杭州数据中心的另一个域名仍然可以使用,但只能处理bucket 属于杭州数据中心的请求。 为了统一起见,接下来章节的例子中, 都将以 oss-cnhangzhou 域名为例。 请根据自己 bucket 所属的数据中心自行替换请求所访问的 Host。

3、OSS防盗链

OSS 是按使用收费的服务, 为了防止用户在 OSS 上的数据被其他人盗链, OSS 支持基于 HTTP header 中表头字段 referer 的防盗链方法。通过 OSS 的控制台–权限管理–防盗链,可以对一个 bucket设置 referer 字段的白名单和是否允许 referer 字段为空的请求访问。例如, 对于一个名为 ossexample 的 bucket,设置其 referer 白名单为 http://www.aliyun.com。则所有 referer 为 http://www.aliyun.com 的请求才能访问 oss-example 这个 bucket 中的 Object。

细节分析:

  1. 用户只有通过 URL 签名或者匿名访问 Object 时,才会做防盗链验证。请求 的 Header 中有“Authorization”字段的,不会做防盗链验证。
  2. 一个 bucket 可以支持多个 referer 参数,这些参数之间由“,”号分隔。oss控制台配置时 使用换行
  3. Referer 参数支持通配符“*”和“?”。
  4. 用户可以设置是否允许 referer 字段为空的请求访问。
  5. 白名单为空时,不会检查 referer 字段是否为空(不然所有的请求都会被拒绝)。
  6. 白名单不为空,且设置了不允许 referer 字段为空的规则;则只有 referer 属于 白名单的请求被允许,其他请求(包括 referer 为空的请求)会被拒绝。
  7. 如果白名单不为空,但设置了允许 referer 字段为空的规则;则 referer 为空的 请求和符合白名单的请求会被允许;其他请求都会被拒绝。
  8. Bucket 的三种权限(private, public-read, public-read-write)都会检查 referer 字段。

4、自定义域名绑定(CNAME)

OSS 支持用户将自定义的域名绑定在属于自己的 bucket 上面,这个操作必 须通过 OSS 控制台(http://oss.aliyun.com) -“Bucket 属性 传输管理 ” -“绑定域名”页面 配置来实现。按照中国《互联网管理条例》的要求,所有需要开通这项功能的用 户,必须提供阿里云备案号,域名持有者身份证等有效资料,经由阿里云审批通 过后才可以使用。在开通 CNAME 功能后, OSS 将自动处理对该域名的访问请求。

CNAME 应用场景例子:

  • 用户 A 拥有一个域名为 abc.com 的网站;这个网站的所有图片存储在 img.abc.com 这个子域名下;
  • 为了应对日益增长的图片流量压力, 用户 A 在 OSS 上创建了一个名为 abc-img 的 bucket, 并将所有图片存在 OSS 上;
  • 通 过 OSS 控 制 台 , 提 交 将 img.abc.com CNAME 成 abc-img.oss-cnhangzhou.aliyuncs.com 的申请,并提供相应的材料
  • 通过阿里云审核后,在自己的域名服务器上,添加一条 CNAME 规则(https://dns.console.aliyun.com/spm=a2c4g.11186623.2.12.70c759cbsvcLcR#/dns/domainList), 将 img.abc.com 映射成 abc-img.oss-cn-hangzhou.aliyuncs.com,这样所有对 img.abc.com 的访问都将变成访问
    abc-img 这个 bucket。例如:一个对 http://img.abc.com/logo.png 的 访 问 , 实 际 上 访 问 的是 http://abc-img.oss-cn-hangzhou.aliyuncs.com/logo.png

5、访问日志记录(Server_Access_Logging)

OSS为用户提供自动保存访问日志记录功能。Bucket的拥有者可以通过OSS控制台(http://oss.aliyun.com)日志管理,为其所拥有的bucket开启访问日志记录功能。当一个bucket(源Bucket,Source Bucket)开启访问日志记录功能后,OSS自动将访问这个bucket的请求日志,以小时为单位,按照固定的命名规则,生成一个Object写入用户指定的bucket(目标Bucket,Target Bucket)

存储访问日志记录的object命名规则:

<TargetPrefix><SourceBucket>-YYYY-mm-DD-HH-MM-SS-UniqueString

命名规则中,TargetPrefix由用户指定;YYYY, mm, DD, HH, MM和SS分别是该Object被创建时的阿拉伯数字的年,月,日,小时,分钟和秒(注意位数);UniqueString为OSS系统生成的字符串。一个实际的用于存储OSS访问日志的Object名称例子如下:

MyLog-oss-example-2012-09-10-04-00-00-0000

上例中,“MyLog-”是用户指定的Object前缀;“oss-example”是源bucket的名称;“2012-09-10-04-00-00”是该Object被创建时的北京时间;“0000” 是OSS系统生成的字符串。

LOG文件格式(从左至右,以空格分隔):

OSS将文件下载到本地的JAVA代码_存储空间_10


OSS将文件下载到本地的JAVA代码_OSS将文件下载到本地的JAVA代码_11

细节分析:

  1. 源Bucket和目标Bucket必须属于同一个用户。
  2. “TargetPrefix”表示存储访问日志记录的object名字前缀,可以为空。
  3. 源bucket和目标bucket可以是同一个Bucket,也可以是不同的Bucket;用户也可以将多个的源bucket的LOG都保存在同一个目标bucket内(建议指定不同的TargetPrefix)。
  4. OSS以小时为单位生成bucket访问的Log文件,但并不表示这个小时的所有请求都记录在这个小时的LOG文件内,也有可能出现在上一个或者下一个LOG文件中。
  5. OSS生成的Log文件命名规则中的“UniqueString”仅仅是OSS为其生成的UUID,用于唯一标识该文件。
  6. OSS生成一个bucket访问的Log文件,算作一次PUT操作,并记录其占用的空间,但不会记录产生的流量。LOG生成后,用户可以按照普通的Object来操作这些LOG文件。
  7. OSS会忽略掉所有以“x-”开头的query-string参数,但这个query-string会被记录在访问LOG中。如果你想从海量的访问日志中,标示一个特殊的请求,可以在URL中添加一个“x-”开头的query-string参数。

如下

http://oss-example.oss.aliyuncs.com/aliyun-logo.png
http://oss-example.oss.aliyuncs.com/aliyun-logo.png?x-user=admin

OSS处理上面两个请求,结果是一样的。但是在访问LOG中,你可以通过搜索“x-user=admin”,很方便地定位 出经过标记的这个请求。

  1. OSS的LOG中的任何一个字段,都可能出现“-”,用于表示未知数据或对于当前请求该字段无效。
  2. 根据需求,OSS的LOG格式将来会在尾部添加一些字段,请开发者开发Log处理工具时考虑兼容性的问题