对象概述
最近更新时间: 2024-10-17 17:10:00
定义
对象(Object)是对象存储的基本单元,对象被存放到存储桶中(例如一张照片存放到一个相册)。用户可以通过腾讯云金融专区控制台、API、SDK 等多种方式管理对象。在 API、SDK 示例中,对象的命名格式为 <ObjectKey>
。
注意:
对象的上传分为两种,分别是简单上传和分块上传。
- 使用简单上传,对象大小限制在5GB以内。
- 使用分块上传,每块的大小限制在5GB以内,分块数量需要小于10000,即最大上传对象为48.82TB。
每个对象都由对象键(ObjectKey)、数据值(Value)、和对象元数据(Metadata)组成。
对象键(ObjectKey):对象键是对象在存储桶中的唯一标识。
数据值(Value):即上传的对象大小。
对象元数据(Metadata):是一组名称值对,您可以在上传对象时对其进行设置。
用户可以通过控制台对对象进行相关配置。
对象键
定义
COS 中的对象需具有合法的对象键,对象键(ObjectKey)是对象在存储桶中的唯一标识。
例如:在对象的访问地址 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/folder/picture.jpg
中,对象键为 folder/picture.jpg
。
命名规范
键的名称可以使用任何 UTF-8 字符,为了使名称有助于确保与其他应用程序的最大兼容性,推荐使用大小写英文字母、数字,即[a-z,A-Z,0-9]和符号
-
,!
,_
,.
,*
及其组合。编码长度最大为850个字节。
对象键中不支持 ASCII 控制字符中的字符上(↑),字符下(↓),字符右(→),字符左(←),分别对应 CAN(24),EM(25),SUB(26),ESC(27)。
如果用户上传的文件或文件夹的名字带有中文,在访问和请求这个文件或文件夹时,中文部分将按照 URL Encode 规则转化为百分号编码。 例如:对
文档.doc
进行访问的时候,对象键为:文档.doc
,实际读取的按 URL Encode 规则转化的百分号编码为:%e6%96%87%e6%a1%a3.doc
。
以下是有效的对象键命名示例:
my-organization
my.great_photos-2016/01/me.jpg
videos/2016/birthday/video.wmv
特殊字符
有些字符在对象键中可能需要以十六进制形式在 URL 中编码或引用,其中有些甚至是不可被打印的,因此浏览器可能无法处理它们,对于这些字符需要进行特殊处理。可能需要特殊处理的字符如下:
, | : | ; | = |
---|---|---|---|
& | $ | @ | + |
? | ASCII 字符范围:00-1F 十六进制(0-31 十进制)以及7F(127 十进制) | (空格) |
还有些字符因为需要进行大量的特殊处理才能在所有应用程序间保持一致性,所以建议直接避免使用。需要避免的字符如下:
` | ^ | " | \ |
---|---|---|---|
{ | } | [ | ] |
~ | % | # | | |
> | < | ASCII 128-255 十进制 |
相关说明
访问地址
对象的访问地址由存储桶访问地址和对象键组成,其结构形式为 [存储桶域名]/[对象键]
。
例如:上传对象exampleobject.txt
到广州(华南)的存储桶 examplebucket-1250000000
中,那么 exampleobject.txt
的访问地址是:examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject.txt
。
文件夹和目录
对象存储中本身是没有文件夹和目录的概念的,对象存储不会因为上传对象project/a.txt
而创建一个project
文件夹。为了满足用户使用习惯,对象存储在控制台中模拟了「文件夹」或「目录」的展示方式,具体实现是通过创建一个键值为project/
,内容为空的对象,展示方式上模拟了传统文件夹。
例如:通过 API、SDK 上传对象project/doc/a.txt
,分隔符/
会模拟「文件夹」的展示方式,于是可以看到控制台上出现「文件夹」project
和doc
,其中doc
是project
下一级「文件夹」,并包含了a.txt
。
注意:
存储桶中不同对象是扁平的分布到不同的分布式集群中的,因此无法直接获取某对象键前缀容量的大小,只能通过累加各对象的大小得到。
对于文件夹和目录进行删除操作,情况会比较复杂,详情如下:
删除途径 | 删除 | 结果 |
---|---|---|
控制台 | 文件夹project |
对象键前缀为project/ 的全部对象都会被删除 |
控制台 | 对象project/doc/a.txt |
project 和doc 文件夹仍会保留 |
API、SDK | 对象project/ 或project/doc/ |
对象project/doc/*.txt 仍会保留。如果想将文件夹内的对象一并删除,则需要用代码遍历实现删除文件夹内对象的功能 |
对象元数据
定义
对象元数据在对象中是一组名称值对,是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字串,又称为 HTTP Header。通过在上传对象时修改 HTTP Header,可以改变页面的响应形式,或者传达配置信息,例如修改缓存时间。
对象元数据包括有两种元数据:系统元数据和用户定义的元数据。
说明:
修改对象的 HTTP Header 不会修改对象本身。
系统元数据
指的是对象的属性信息,如上传或修改的时间等。
名称 | 说明 |
---|---|
Date | 当前日期和时间 |
Content-Length | RFC 2616 中定义的 HTTP 请求内容长度(字节),常用于 PUT 类型的 API 的操作 |
Last-Modified | 对象创建日期或上次修改日期(以较晚者为准) |
Content-MD5 | RFC 1864 中定义的经过 Base64 编码的 128-bit 内容 MD5 校验值。此头部用来校验文件内容是否发生变化 |
Authorization | 携带鉴权信息, 用以验证请求合法性的签名信息。针对公有读的文件,无需携带此头部 |
x-cos-version-id | 对象版本。在存储桶上启用版本控制时,返回对象的版本 ID |
ETag | 如通过 PUT Object 上传的对象,则为上传文件内容的 MD5 值;如通过分块上传或使用历史版本 API 上传的对象,为上传文件内容的唯一 ID,不具备校验功能 |
Expect | RFC 2616 中定义的 HTTP 请求内容长度(字节) |
Connection | 声明客户端与服务端之间的通信状态。 枚举值:keep-alive,close |
用户定义元数据
指的是对象的可自定义参数,如 Content-Type,Cache-Control,Expires,x- cos-meta- 等。
名称 | 描述 |
---|---|
Cache-Control | RFC 2616 中定义的缓存策略,将作为 Object 元数据保存 |
Content-Disposition/Encoding/Type | RFC 2616 中定义的文件名称/编码格式/内容类型(MIME),将作为 Object 元数据保存 |
Expires | 对象缓存过期时间。 |
x-cos-acl | 定义 Object 的 ACL 属性。有效值:private,public-read-write,public-read;默认值:private |
x-cos-grant-* | 赋予被授权者某种权限 |
x-cos-meta- * | 允许用户自定义的头部信息,将作为 Object 元数据返回(大小限制为2K) |
x-cos-storage-class | 设置 Object 的存储级别,枚举值:STANDARD,STANDARD_IA,ARCHIVE,默认值:STANDARD |
x-cos-server-side-encryption | 指定是否为对象启用服务端加密的方式。 使用 COS 主密钥加密填写:AES256 |
对象子资源
COS 有与存储桶和对象相关联的子资源。子资源从属于对象,即子资源不会自行存在,它始终与某些其他实体 (例如对象或存储桶) 相关联。 访问控制列表(Access Control List)是指特定对象的访问控制信息列表,它是 COS 中对象的子资源。
访问控制列表包含可以识别被授权者和其被授予的许可的授权列表,来实现对对象的访问控制。创建对象时,ACL 将识别可以完全控制对象的对象所有者。用户可以检索对象 ACL 或将其替换为更新的授权列表。
说明:
对 ACL 的任何更新都需要替换现有 ACL。
访问权限类型
对象存储 COS 支持对象设置两种权限类型:公共权限和用户权限。 公共权限:包括继承权限、私有读写和公有读私有写。
继承权限:对象继承存储桶的权限,与存储桶的访问权限一致。当访问对象时,COS 读取到对象权限为继承存储桶权限,会匹配存储桶的权限,来响应访问。任何新对象被添加时,默认继承存储桶权限。
私有读写:当访问对象时,COS 读取到对象的权限为私有读写,此时无论存储桶为何种权限,对象都需要通过签名鉴权才可访问。
公有读私有写:当访问对象时,COS 读取到对象的权限为公有读,此时无论存储桶为何种权限,对象都可以被直接下载。
用户权限:主账号默认拥有对象所有权限(即完全控制)。另外 COS 支持添加子账号有数据读取、数据写入、权限读取、权限写入,甚至完全控制的最高权限。
适用场景
在私有读写的存储桶中对特定对象设置允许公有访问,或在公有读写存储桶中对特定对象设置需要鉴权才可访问。