对象概述

最近更新时间:2024-10-14 09:47:31

我的收藏

简介

对象(Object)是对象存储(Cloud Object Storage,COS)的基本单元,可理解为任何格式类型的数据,例如图片、文档和音视频文件等。存储桶(Bucket)是对象的载体,每个存储桶可容纳任意数量的对象。对象在 COS 中可指定为不同的存储类型,详情请参见 存储类型概述
每个对象都由对象键(ObjectKey)、对象值(Value)、和对象元数据(Metadata)组成。
对象键(ObjectKey):对象键是对象在存储桶中的唯一标识,可以通俗的理解为文件路径。在 API、SDK 示例中,对象的命名格式为<ObjectKey>
对象值(Value):即上传的对象本身,可以通俗的理解为文件内容(Object Content)。
对象元数据(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个字节。
不允许以正斜线/或者反斜线\\开头。
不允许携带以下字符串:%0a%0d
对象键中不支持 ASCII 控制字符中的字符上(↑),字符下(↓),字符右(→),字符左(←),分别对应 CAN(24),EM(25),SUB(26),ESC(27)。
对于特殊字符,例如*%等字符,尽量避免直接作为文件名使用。
说明
如果用户上传的文件或文件夹的名字带有中文,在访问和请求这个文件或文件夹时,中文部分将按照 URL Encode 规则转化为百分号编码。 例如:对文档.doc进行访问的时候,对象键为:文档.doc,实际读取的按 URL Encode 规则转化的百分号编码为:%e6%96%87%e6%a1%a3.doc
以下是有效的对象键命名示例:
doc/exampleobject
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文件夹。为了满足用户使用习惯,对象存储在控制台、COS browser 等图形化工具中模拟了「文件夹」或「目录」的展示方式,具体实现是通过创建一个键值为project/,内容为空的对象,展示方式上模拟了传统文件夹。
例如:通过 API、SDK 上传对象project/doc/a.txt ,分隔符/会模拟「文件夹」的展示方式,于是可以看到控制台上出现「文件夹」projectdoc,其中docproject下一级「文件夹」,并包含了a.txt
注意
存储桶中不同对象是扁平的分布到不同的分布式集群中的,因此无法直接获取某对象键前缀容量的大小,只能通过累加各对象的大小得到。
对于文件夹和目录进行删除操作,情况会比较复杂,详情如下:
删除途径
删除对象或文件夹
结果
控制台
文件夹project
对象键前缀为project/的全部对象都会被删除
控制台
对象project/doc/a.txt
projectdoc文件夹仍会保留
API、SDK
对象project/project/doc/
对象project/doc/a.txt仍会保留。如果想将文件夹内的对象一并删除,则需要用代码遍历实现删除文件夹内对象的功能

对象元数据

对象元数据在对象中是一组键值对,是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字符串,又称为 HTTP Header。通过在上传对象时修改 HTTP Header,可以改变页面的响应形式,或者传达配置信息,例如修改缓存时间。
对象元数据包括有两种元数据:系统元数据和用户定义的元数据。
说明
修改对象的 HTTP Header 不会修改对象本身。

系统元数据

指对象的属性信息,例如对象修改时间、对象大小、存储类型等。
名称
说明
Content-Length
RFC 2616 中定义的 HTTP 请求内容长度(字节)
Last-Modified
对象创建日期或上次修改日期(以较晚者为准)
x-cos-version-id
对象版本 ID。在存储桶上启用版本控制时,返回对象的版本 ID,用于标识同一对象的历史版本
ETag
如通过 PUT Object 上传的对象,则为上传文件内容的 MD5 值,如通过分块上传或使用历史版本 API 上传的对象,为上传文件内容的唯一 ID,不具备校验功能

用户定义元数据

指的是对象的可自定义参数,如 Content-Type,Cache-Control,Expires,x-cos-meta-* 等。具体信息请参见 自定义对象 Headers
名称
说明
Cache-Control
RFC 2616 中定义的缓存策略,将作为对象元数据保存
Content-Disposition、
Content-Encoding、
Content-Type
RFC 2616 中定义的文件名称/编码格式/内容类型(MIME),将作为对象元数据保存
Expires
RFC 2616 中定义的缓存失效时间,将作为对象元数据保存
x-cos-acl
定义对象的访问控制列表(ACL)属性。有效值:private,public-read-write,public-read;默认值:private
x-cos-grant-*
赋予被授权者某种权限
x-cos-meta-*
允许用户自定义的头部信息,将作为对象元数据返回(大小限制为2K)
x-cos-storage-class
设置对象的存储级别,枚举值:STANDARD,STANDARD_IA,ARCHIVE;默认值:STANDARD
x-cos-server-side-encryption
指定是否为对象启用服务端加密及加密的方式

对象操作

用户可以通过腾讯云控制台、工具、API、SDK 等多种方式管理对象。
注意
按照支持的最大上传文件大小,划分为两种上传方式:简单上传分块上传
使用简单上传,对象大小限制在5GB以内。
使用分块上传,每块的大小限制在5GB以内,分块数量需要小于10000,即最大上传对象约为48.82TB,更多限制说明,请参见 规格与限制
上传对象完成后,用户可以通过控制台对对象进行相关配置,具体请参见以下内容:

对象子资源

COS 有与存储桶和对象相关联的子资源。子资源从属于对象,即子资源不会自行存在,它始终与某些其他实体(例如对象或存储桶)相关联。 访问控制列表(Access Control List)是指特定对象的访问控制信息列表,它是 COS 中对象的子资源。
访问控制列表包含可以识别被授权者和其被授予的许可的授权列表,来实现对对象的访问控制。创建对象时,ACL 将识别可以完全控制对象的对象所有者。用户可以检索对象 ACL 或将其替换为更新的授权列表。
说明
对 ACL 的任何更新都需要替换现有 ACL。

访问权限类型

对象存储 COS 支持对象设置两种权限类型:公共权限用户权限公共权限:包括继承权限、私有读写和公有读私有写。
继承权限:对象继承存储桶的权限,与存储桶的访问权限一致。当访问对象时,COS 读取到对象权限为继承存储桶权限,会匹配存储桶的权限,来响应访问。任何新对象被添加时,默认继承存储桶权限。
私有读写:当访问对象时,COS 读取到对象的权限为私有读写,此时无论存储桶为何种权限,对象都需要通过 请求签名 才可访问。
公有读私有写:当访问对象时,COS 读取到对象的权限为公有读,此时无论存储桶为何种权限,对象都可以被直接下载。
用户权限:主账号默认拥有对象所有权限(即完全控制)。另外 COS 支持添加子账号有数据读取、数据写入、权限读取、权限写入,甚至完全控制的最高权限。

适用场景

在私有读写的存储桶中对特定对象设置允许公有访问,或在公有读写存储桶中对特定对象设置需要鉴权才可访问。