阿里云对象存储OSS简介和使用

简介

OSS是什么

阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。非常适合存储非结构化数据,例如视频、图形、日志、文本文件以及各种App应用、多终端同步软件、网盘下载站的文件等单个文件的大小从1字节到48.8TB,可以存储的个数无限制

存储类型

非特殊场景直接选择标准类型就可以了。

费用说明

OSS的所有计费服务都是单独计费的,例如您存储文件会产生存储费用;通过外网访问OSS存储的文件,会产生外网流出流量费用;使用图片处理服务处理OSS的图片会产生图片处理费用等。

以常见的费用明细罗列如下(未考虑搭配CDN情况):

  • 存储费用:标准存储(本地冗余)容量

    • 按量计费0.12元/GB/月

    • 包年包月标准型(本地冗余LRS)存储包 100G年价99元 = 0.99元/GB/年 = = 0.08元/GB/月

      一年内容量在100G之内的部分会通过存储包抵扣,超出部分自动按量计费

  • 流量费用:外网流出流量

    • 按量计费:00:00-08:00(闲时):0.25元/GB、8:00-24:00(忙时):0.50元/GB

    • 包年包月下行流量包 100G年价441 = 0.36元/GB

      一年内每个月都有100G的外网下载流量抵扣额度,每月1号更新,超出部分自动按量计费

  • 请求费用:Put类型请求次数、Get类型请求次数

    • 按量计费0.01元/万次
    • 包年包月:不支持
  • 图片处理费用

    • 图片处理:每月0-10TB:免费,大于10TB:0.025元/G
    • 图片高级压缩:低规格(800×600以下):0.025元/千次、中规格(1600×1200以下):0.1元/千次

以上所有费用相加即为总费用,可以看到主要还是流量费用贵,其他的很便宜可以忽略了。费用明细地址:请参见阿里云产品定价

这里提一嘴,ECS那边的流量费是0.8元/GB详情链接

计费周期

OSS以小时为周期统计OSS所有资源的使用量,并按照使用量结算产生的费用。

计费案例详情地址

李先生在OSS内存储了505GB标准存储(本地冗余)类型文件,存储空间所在地域为华东1(杭州),每小时的请求数均值为1000次,每天的外网流出流量约为2GB 。李先生可以选择以下两种方案进行付费:

  • 仅按量计费

    • 存储费用=505 GB*0.12元/GB/月=60.6元

    • 请求费用=1000*0.01元/10000次*24小时*30天=0.72元

    • 流量费用=2 GB*30天*0.5元/GB=30元

      说明 OSS计算流量费用时,分为忙时流量(8:0024:00,0.50元/GB)和闲时流量(00:0008:00,0.25元/GB),用户都是白天使用,此处按忙时流量计算。

    • 总费用一个月费用91.32

  • 包年包月+按量计费

    • 存储费用=54元(500 GB标准(LRS)存储包)+5 GB*0.12元/GB/月=54.6元

      说明 超出存储包的5 GB数据按量计费。

    • 请求费用=1000*0.01元/10000次*24小时*30天=0.72元

    • 流量费用=9.96元(50 GB流量包)+10 GB*0.5元/GB=14.96元

      说明

      • 流量以忙时流量计算。
      • 50 GB流量包只有半年包,平均每月需59.76元/6个月=9.96元。
    • 总费用一个月费用70.28

使用限制

仅列出核心限制

限制项说明
带宽中国内地各地域10 Gbit/s、其他地域5 Gbit/s。如达到该阈值,请求会被流控。说明 当请求被流控时,请求返回的Header中会携带x-oss-qos-delay-time: number。其中number为请求被流控的时长,单位为ms。 上传类请求会返回精确的被流控的时长;下载类请求会返回根据流控程度和文件大小估算出的被流控的时长。如果您的业务(如大数据离线处理等)有更大的带宽(10 Gbit/s~100 Gbit/s)需求,请联系技术支持
对象或文件(Object)上传文件的大小
通过简单上传表单上传追加上传的方式上传单个文件,文件的大小不能超过5 GB。
通过分片上传的方式上传单个文件,文件的大小不能超过48.8 TB。
同名文件被覆盖默认情况下,如果上传的文件与已有文件同名,则覆盖已有文件。为防止文件被意外覆盖,您可以通过为文件所在的Bucket开启版本控制,或者在上传请求的Header中携带参数x-oss-forbid-overwrite,并指定其值为true。
域名绑定中国内地各地域绑定的域名必须在工信部备案,其他地域的域名绑定不需要在工信部备案。一个域名只能绑定在一个存储空间上,一个存储空间最多可以绑定100个域名。一个账号可绑定的域名个数无限制。
回源规则一个存储空间最多可配置20条回源规则。对于镜像回源,
中国内地各地域和中国香港默认QPS为2,000、流量为2 Gbit/s;
海外各地域默认QPS为1,000、流量为1 Gbit/s。
图片处理图片限制原图图片格式只支持JPG、PNG、BMP、GIF、WebP、TIFF。原图大小不能超过20 MB。
样式限制每个存储空间下最多能创建50个样式
资源包地域资源包仅支持在归属地域使用;中国大陆通用资源包仅支持在中国内地(不含中国香港)使用。已购资源包不支持更换地域。资源包中的存储包不支持叠加购买,但您可以对已购存储包进行升级。资源包中的传输加速包和回源流量包支持叠加购买,但不支持升级和续费。资源包中的下行流量包支持叠加购买和续费,但不支持升级。请求费用数据处理费用流量费用中的跨区域复制流量费用暂时无对应的资源包,即不支持包年包月,仅支持按量计费。

快速使用

1.开通服务

打开OSS产品详情页,单击立即开通即可。开通OSS服务后,默认的计费方式是按量计费。(傻瓜式直接干就完事了)

如果想进一步降低OSS费用,建议您购买OSS资源包

2.创建Bucket

存储空间(Bucket)是用于存储对象(Object)的容器。在上传任意类型的Object前,您需要先创建Bucket。

Bucket名称:Bucket名称必须全局唯一

地域:Bucket的数据中心。Bucket一旦创建,则无法更改其所在地域。ECS内网访问OSS,请选择与ECS相同的地域

3.测试上传、访问

测试上传文件

直接到对应的桶上传即可,不截图了

测试访问文件

注意 通过文件URL访问图片时,默认是下载行为。如需确保通过文件URL访问图片时是预览行为,您需要绑定自定义域名并添加CNAME记录。具体操作,请参见绑定自定义域名

开发接入

1.pom依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

自己去官方maven仓库看最新的版本

2.获取AccessKey

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

创建秘钥

3.代码示例

1.初始化

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";

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

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

2.上传文件

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";

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

// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt");
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
ossClient.putObject("examplebucket", "exampledir/exampleobject.txt", inputStream);

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

3.获取上传后地址

"https://" + ossSetting.getBucketName() + "." + ossSetting.getEndPoint() + "/" + objectName;

高级功能

表单上传

追加上传

断点续传上传

分片上传

图片处理

对OSS中存储的图片执行不同的操作,例如格式转换、裁剪、缩放、旋转、水印和样式封装等。

例如:

  • 原图:https://laker.oss-cn-hangzhou.aliyuncs.com/d1130961908d4c3681be7e878dc764a6.jpg
  • 想获取其400X400图:https://laker.oss-cn-hangzhou.aliyuncs.com/d1130961908d4c3681be7e878dc764a6.jpg?x-oss-process=style/400X400

结尾处加?x-oss-process=style/400X400、?x-oss-process=style/200X200即可

要预先在OSS控制台-数据处理-新建400X400样式

使用图片处理服务时,会产生如下费用:

  • 图片处理费用

    未超出免费额度时,不产生费用;超出免费额度后,按处理的原图实际大小计费。

    图片处理服务每个账号每月有10 TB的免费额度,即每月处理的原图累计不超过10 TB时,不收取图片处理费用;超过10 TB时,仅计算超出部分的费用。

  • 请求费用

    处理图片时会产生一次GetObject请求,按请求次数收费。

  • 流量费用

    根据处理的原图大小收取外网流出流量费用。

这个计费有点难受啊

防盗链设置

可以看下面的监控中,有哪些Refer偷用我们的图片流量,给他关小黑屋,直接在控制台设置即可。

监控

这里面有很多统计项,可以看有没有人恶意刷咱们的流量,可以给他关小黑屋。

搭配CDN

常见问题

1.OSS的数据是如何组织的?

OSS是一个分布式的对象存储服务,提供的是一个Key-Value形式的对象存储服务。当您存储文件(Object)时,需要指定此Object的名称(Key),后续您将通过这个Key来获取该Object的内容。

Key也可以用来模拟文件夹的一些属性。OSS中文件夹的概念仅是一个逻辑概念,在通过API或SDK的方式设置文件夹的时候可以指定Object对应的Key值包括前面的目录即可模拟文件夹功能。例如,定义Object的Key为dir/example.jpg,就会在当前Bucket下创建一个名为dir的文件夹,并在该文件夹下创建一个名为example.jpg的文件。如果用户删除了dir/example.jpg,将不会再存在dir这个文件夹。