小米开放文件存储(FD S)用户指南
1. 小米开放文件存储(FD S)简介
1.1 FDS综述
小米开放文件存储(File Storage Service,简称FDS) 是小米开放平台所提供的众多云服务之中的一种。 FDS向开发者提供了简洁直观的Restful API开发者可以直接通过标准Http协议来调用FDS的API同时为了方便广大开发者 FDS目前提供了Java、PHP和Android平台的SDK开发者可以根据自己的应用需求选用合适的SDK。
1.2 FDS的优势
FDS专注于提供使用简便、可靠的文件存储服务下面是FDS服务的一些优势:
简单的数据模型 FDS采用了Bucket/Object数据模型跟业内主流系统保持一致方便开发者理解 降低使用门槛
直观易用的API FDS提供了简洁的Restful API,开发者可以通过标准Http协议直接访问 完善的认证与授权机制 FDS支持各种身份认证机制包括签名、OAuth2.0和小米SSO认证 FDS还支持了完备的授权管理机制最大程度的保护用户数据的安全
弹性高可用的服务质量 FDS架构上支持良好的水平扩展性对用户提供7x24高可用的服务
灵活的应用场景:支持的文件大小不受限制能很好地适应更种应用场景 低廉的存储成本:支持Reed-Solomo n编码在保证数据可靠性的前提下能够最大程度地节约存储成本。
1.3 FDS的基本概念
桶(Bucket) : Bucket是存储Obj ect的容器在同一个Region内 Bucket是全局唯一的。每个Object都存在于某一个Bucket中一个Bucket里面可以包含很多个Object。
对象(Object) : Object是用户实际存储在FDS中的数据包括用户存储的文件内容和文件相关的元信息它们合在一起统称为Object。
区域(Region) : Region是物理上数据中心的划分一个数据中心的FDS称之为一个Region。 同一个Region内的Bucket在该Region内是全局唯一的。
2. 用户身份认证
2.1签名认证
本部分介绍FDS中用到的签名认证的基本原理。
2.1.1基本概念
本部分介绍FDS中用到的签名认证的基本原理。
使用FDS服务的签名算法需要了解以下基本概念:
App Access Key:开发者在小米开放平台申请的App Access Key,用于标识开发者的App
App Secret Key: 开发者在小米开放平台申请App Access Key时颁发的AppSecret Key,这个由用户自己保存是用来做签名时的密钥
Signature:根据Access Key Secret Key和用户请求计算出的数字签名用于验证用户身份。
2.1.2基于签名的认证过程
1. 构建准备发往FDS的Http请求
2. 使用App Secret Key和构建好的请求内容计算签名
3. 将计算好的签名和 App Access Key 组合起来 置于 Http请求的“authorization” Header中将请求发往FDS;
4. FDS收到请求从”authorization” Header中解析中App Access Key和对应的签名;
5. FDS用解析出的App Access Key获取到对应的App Secret Key;
6. FDS用App Secret Key和请求内容进行签名得到服务端签名;
7. FDS对比服务端签名和用户请求解析出来签名如果一致刚认证通过否则认证不通过。
注意: App Secret Key不会在上述请求过程中传输。
2.1.3签名算法
签名算法是签名认证的核心 以下是签名算法的详细介绍:
签名在Http头中的格式: “author ization: Galaxy-V2“ + “ “+App Access Key+ “:” + Signature
签名计算: Signature = Base 64 (Hmac-Sha1 (AppAcc essSecret,
StringToSign) ) ;
签名字符串(String ToSign)的构造:
StringToSign = HttpMe thod + “\n” +content-md5 + “\n” +content-type + “\n” +date + “\n” +
CanonicalizedHeade rs +
CanonicalizedResou rce;
Canoni calize dHeade rs构造:
用户可以通过“x-xiaomi-“的方式 向FDS传自定义的Header,
CanonicalizedHeade rs指的是规范化过之后的用户自定义的Header s规范化的过程如下:
1. 所有的Header都要转成全小写
2. 将Heade r按Key进行字典序排序
3. 将具有相关Key的Headers合并多个值之间用”,”分隔
4. 将上述字符串连接起来即是CanonicalizedHeade rs。
CanonicalizedResou rce构造: Cannon icaliz edReso urce是由用户请求的Uri的相对路径加上FDS预定义的SubResou rce(Acl等)相关的参数组成的。
2.1.4签名库
FDS目前提供了C++/Java/PHP版本的签名库详细的签名算法可以参见具体的签名库的实现。
3. Bucket操作REST API指南
3.1列所有Bucket
语义:列出当前用户所拥有的所有Buckets
语法:
GET / HTTP/1.1Host: files.fds.api.xiaomi.comDate: dateAuthoriz ation: authorization_string
请求参数:无
请求头:
是否
字段 取值 必须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间Authorizatio n 身份认证字符串跟选用的认证机制有关具体格式 是 目前支持Signature/OAut
为 种方式的认证选择合适的使
1.签名认证: “Ga“la“xy_V2” + “ “ +
AppAccessKey + : + Signat ure
2.OAuth 2.0认证: “OAuth”
3.小米SSO认证: “SSO”
3.2创建新Bucket
语义:创建指定名字的Bucke t
语法:
PUT /bucket_name HTTP/1.1Host: files.fds.api.xiaomi .comDate: dateContent-Length: content_lengthAuthorization: authorization_string
请求参数:
参数 取值 是否必须 描述acl 无 否 正常创建Bucket时不需要如果要修改Bucket的ACL信息需要指定该参数请求头:
是否
字段 取值 必须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间
Authorizatio n 身份认证字符串跟选用的认证机制有关具体 是 目前支持Signatur e/OAuth 2
格式为 式的认证选择合适的使用
1.签名认证: “Galaxy_V2” + “ “ +
AppAccessKey + “:“ + Signature
2.OAuth 2.0认证: “OAuth”
3.小米SSO认证: “SSO”
Content-Length 整数值, body的长度 是 创建Bucket时Body长度为
是否
字段 取值 必须 描述
时 Body长度为对应的JSON
3.3列Bucket下面的Object
语义:列出指定Bucket下面所有的Objects
语法:
GET /bucket_name HTTP/1.1Host: files.fds.api.xiaomi .comDat e: dateAuthoriz ation: authorization_string
请求参数:
是否
参数 取值 必须 描述acl 无 否 用于获取指定Bucket的ACL信息uploads 无 否 用于获取指定Bucket下正在进行的Multipart Uploadprefix 字符串 否 列指定前缀的所有Objectsdelimiter 字符缺省为’/’ 否 Object名字中的分隔符用来生成Common Prefixmarker 字符串 否 当一个Bucket下面的Obj ect数量大于maxKeys时会分
表示当前批次的起始Object名字(字典序)maxKeys 在(0, 1000]范围内的整 否 当一个Bucket下面有比较多的Object数量的时候需
数缺省为1000 maxKeys表示每个批次可返回Object数的最大值请求头:
是否
字段 取值 必须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间Authorizatio n 身份认证字符串跟选用的认证机制有关具体格式 是 目前支持Signature/OAut
为 种方式的认证选择合适的使
1.签名认证: “Galaxy_V2” + “ “ +
AppAccessKey + “:“ + Signat ure
2.OAuth 2.0认证: “OAuth”
是否
字段 取值 必须 描述
3.小米SSO认证: “SSO”
3.4删除Bucket
语义:删除指定名字的Bucke t
语法:
DELETE /bucket_name HTTP/1.1Host: files.fds.api.xiaomi.comDat e: dateAuthorization: authorization_string
请求参数:无
请求头:
是否
字段 取值 必须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间Authorizatio n 身份认证字符串跟选用的认证机制有关具体格式 是 目前支持Signature/OAut为 种方式的认证选择合适的使 1.签名认证: “Galaxy_V2” + “ “ +
AppAccessKey + “:“ + Signat ure
2.OAuth 2.0认证: “OAuth”
3.小米SSO认证: “SSO”
3.5判断Bucket存在性
语义:判断指定的Bucket是否存在
语法:
HEAD /bucket_name HTTP/1.1Host: files.fds.api.xiaomi.comDat e: dateAuthoriz ation: authorization_string
请求参数:无
请求头:
是否
字段 取值 必须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间Authorizatio n 身份认证字符串跟选用的认证机制有关具体格式 是 目前支持Signature/OAut
为 种方式的认证选择合适的使
1.签名认证: “Ga“la“xy_V2” + “ “ +
AppAccessKey + : + Signat ure
2.OAuth 2.0认证: “OAuth”
3.小米SSO认证: “SSO”
4. Object操作REST API指南
4.1上传Obje ct (PUT)
语义:上传指定名字的Object到指定的Bucket下 同名Object为覆盖语义
语法:
PUT /bucket_name/object_name HTTP/1. 1
Host: files.fds.api.xiaomi .comDate: date
Authorization: authorization_stringbody
请求参数:
是否必
参数 取值 须 描述uploads 无 否 Multipart Upload开关传该参数就表示当前的Upload是一个MpartNumber 整数 否 Multipart Upload的part序号用于表示当前上传的是第多少个renameTo 字符串 否 用来对Obj ect进行重命名值是重命名后的Object名字acl 无 否 ACL开关传该参数表示给当前的Obj ect设置ACLexpires 整数毫秒 否 上传成功返回的Pre-signed URI的过期时间不传的话默认为3请求头:
是
否
必
字段 取值 须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间
Authorizatio n 身份认证字符串跟选用的认证机制有关具 是 目前支持Signatur e/OAuth2
体格式为 式的认证选择合适的使用
1.签名认证: “Galaxy_V2” + “ “+
AppAcc essKey + “:“ +
Signature
2.OAuth 2.0认证: “OAuth”
3.小米SSO认证: “SSO”
Content-Length 整数值, body长度 是 body内容的字节长度Content-Type 字符串, body类型 否 body内容的类型缺省会根据
识别不能识别的缺省为置为binary/octet-streamContent-MD5 字符串, Base64 (body MD5) 否 用于检验body内容正确性Cache-Contro l 字符串需符合Http协议定义 否 用来控制对当前Object的缓存Content-Encoding 字符串需符合Http协议定义 否 用来指定Object内容的编码方Last-Modified 字符串需符合Http协议定义 否 用来指定Object最后一次更新x-xiaomi-meta- 字符串用户自定义的的元信息 否 以x-xiaomi-meta-为前缀
的元信息
4.2上传Object (POST)
语义:上传不指定名字的Object到指定的Bucket下 由服务端生成唯一的名字
语法:
POST /bucket_name HTTP/1.1Host: files.fds.api.xiaomi.comDat e: dateAuthoriz ation: authorization_string
请求参数:
是否必
参数 取值 须 描述uploads 无 否 Multipart Upload开关此处用于初始化一个不指定Object名字的Mexpires 整数毫秒 否 过期时间该值用于上传成功返回的Pre-signed URI的过期不传的话请求头:与通过PUT上传Object的相同
4.3下载Object
语义:从指定的Bucket下载指定的Object
语法:
GET /bucket_name/object_name HTTP/1.1Host: files.fds.api.xiaomi.comDat e: dateAuthorization: authorization_string
请求参数:
参数 取值 是否必须 描述acl 无 否 获取Object ACL信息的开关打开时 GET的结果是对应Object的Ametadata 无 否 获取Object元数据的开关打开时 GET的结果是对应Object的元数请求头:
是否
字段 取值 必须 描述
Date 字符串需符合Http协议定义 是 请求的当前时间Authorizatio n 身份认证字符串跟选用的认证机制有关具体格式 是 目前支持Signature/OAut
为 种方式的认证选择合适的使
1.签名认证: “Galaxy_V2” + “ “ +
AppAccessKey + “:“ + Signat ure
2.OAuth 2.0认证: “OAuth”
3.小米SSO认证: “SSO”
4.4删除Object
语义:从指定的Bucket下删除指定的Object
语法:
#年终感恩活动#华纳云海外物理机688元/月,续费同价,50M CN2 GIA/100M国际大带宽可选,超800G 防御,不限流华纳云成立于2015年,隶属于香港联合通讯国际有限公司。拥有香港政府颁发的商业登记证明,作为APNIC 和 ARIN 会员单位,现有香港、美国等多个地区数据中心资源,百G丰富带宽接入,坚持为海内外用户提供自研顶级硬件防火墙服务,支持T B级超大防护带宽,单IP防护最大可达...
近日快云科技发布了最新的夏季优惠促销活动,主要针对旗下的香港CN2 GIA系列的VPS云服务器产品推送的最新的75折优惠码,国内回程三网CN2 GIA,平均延迟50ms以下,硬件配置方面采用E5 2696v2、E5 2696V4 铂金Platinum等,基于KVM虚拟架构,采用SSD硬盘存储,RAID10阵列保障数据安全,有需要香港免备案CN2服务器的朋友可以关注一下。快云科技怎么样?快云科技好不...
外贸主机哪家好?抗投诉VPS哪家好?无视DMCA。ParkinHost今年还没有搞过促销,这次parkinhost俄罗斯机房上新服务器,母机采用2个E5-2680v3处理器、128G内存、RAID10硬盘、2Gbps上行线路。具体到VPS全部200Mbps带宽,除了最便宜的套餐限制流量之外,其他的全部是无限流量VPS。ParkinHost,成立于 2013 年,印度主机商,隶属于 DiggDigi...