本文介绍使用 TOS API 过程中遇到的常见问题。
TOS 服务本身没有目录的概念,所有对象都是平铺存放到桶下。为了在 TOS 的桶内模拟目录的场景,通常约定名称以 /
结尾的对象(无论对象大小)是一个目录。
TOS 服务本身没有目录的概念,通常约定名称以 /
结尾的对象(无论对象大小)是一个目录。使用 TOS API 列举对象接口时,支持传入分隔符(delimiter
)参数来模拟按目录列举的场景。
设置该分隔符后,列举对象接口的响应消息体中会同时返回以下信息
CommonPrefixes
数组:表示子目录集合以及返回。Contents
数组:表示当前目录包含的对象集合。您可以根据 CommonPrefixes 中包含的子目录为前缀(prefix
)参数,依次列举子目录下的子目录集合和对象集合。更多关于列举对象接口的介绍,请参见 ListObjects。
不支持,仅提供按前缀和分隔符(通常是 /
)的按对象名字典序的正序查询。
TOS 服务本身没有目录的概念,因此不提供获取桶内目录大小和文件个数的接口。如果您确实需要获取桶内目录大小及文件的个数,您可以通过 ListObjects 接口,依次统计桶内目录大小和文件个数。更多信息,请参见 ListObjects。
TOS 服务本身没有目录的概念,因此不提供上传、下载及删除目录。如果您确实需要上传、下载及删除目录,您可以通过以下 API 分别实现:
TOS 服务当前没有提供对象重命名的 API,如果需要实现,可以采用依次调用 CopyObject 和 DeleteObject 的方式。另外,对于超过 5 GB 的大对象,直接调用 CopyObject 无法复制成功,需要利用 UploadPartCopy 分段复制的方式来实现。
CopyObject 接口是独立的内网带宽,不会占用您的读/写带宽配额,且该接口是幂等的,客户端超时重试不会导致复制数据错乱。
GetObject 接口实现了标准的 HTTP Range Get 协议,可以通过请求头域中携带 Range: bytes=x-y
来实现获取对象内容的一部分,更多信息,请参见 GetObject 文档。
TOS 服务提供了 HeadObject 接口来查询对象元数据,当对象存在时,会在响应头域中返回 ETag
和 Last-Modified
代表对象数据的 Hash 值以及对象的最后上传时间。
使用 GetObject 或 CopyObject 接口时,可以通过 HTTP 协议定义的 If-Match 或 If-Unmodified-Since 语法确保仅在对象未发生变化时才执行操作。
注意
相同地域或跨地域转存时,请确保您拥有源桶的读权限以及目标桶的写权限。
403 错误通常是因为参与签名的关键字段与实际 HTTP 请求时发送的字段是否匹配,例如方法名(GET/HEAD/PUT/POST/DELETE)、请求 Query 参数、请求的头域等,更多信息,请参见 URL 中包含签名。
TOS 服务端支持使用最大 7 天有效期的预签名 URL,生成预签名 URL 的方法,请参见 URL 中包含签名。推荐您使用 TOS SDK 的 PreSignedURL 函数来生成预签名。