You need to enable JavaScript to run this app.
导航
API
最近更新时间:2023.06.14 20:49:01首次发布时间:2023.05.10 19:17:12

本文介绍使用 TOS API 过程中遇到的常见问题。

如何判断对象是否为目录?

TOS 服务本身没有目录的概念,所有对象都是平铺存放到桶下。为了在 TOS 的桶内模拟目录的场景,通常约定名称以 / 结尾的对象(无论对象大小)是一个目录。

如何使用 API 列举目录?

TOS 服务本身没有目录的概念,通常约定名称以 / 结尾的对象(无论对象大小)是一个目录。使用 TOS API 列举对象接口时,支持传入分隔符(delimiter)参数来模拟按目录列举的场景。
设置该分隔符后,列举对象接口的响应消息体中会同时返回以下信息

  • CommonPrefixes 数组:表示子目录集合以及返回。
  • Contents 数组:表示当前目录包含的对象集合。

您可以根据 CommonPrefixes 中包含的子目录为前缀(prefix)参数,依次列举子目录下的子目录集合和对象集合。更多关于列举对象接口的介绍,请参见 ListObjects

ListObjects 接口支持倒序查询吗?

不支持,仅提供按前缀和分隔符(通常是 /)的按对象名字典序的正序查询。

如何获取桶内目录大小和文件个数?

TOS 服务本身没有目录的概念,因此不提供获取桶内目录大小和文件个数的接口。如果您确实需要获取桶内目录大小及文件的个数,您可以通过 ListObjects 接口,依次统计桶内目录大小和文件个数。更多信息,请参见 ListObjects

是否提供上传、下载及删除目录 API?

TOS 服务本身没有目录的概念,因此不提供上传、下载及删除目录。如果您确实需要上传、下载及删除目录,您可以通过以下 API 分别实现:

如何通过 API 实现对象重命名(Rename)?

TOS 服务当前没有提供对象重命名的 API,如果需要实现,可以采用依次调用 CopyObject 和 DeleteObject 的方式。另外,对于超过 5 GB 的大对象,直接调用 CopyObject 无法复制成功,需要利用 UploadPartCopy 分段复制的方式来实现。

CopyObject 接口是否会占用带宽配额?是否支持幂等?

CopyObject 接口是独立的内网带宽,不会占用您的读/写带宽配额,且该接口是幂等的,客户端超时重试不会导致复制数据错乱。

GetObject 接口是否支持通过 offset+length 的方式获取对象内容的某一段数据?

GetObject 接口实现了标准的 HTTP Range Get 协议,可以通过请求头域中携带 Range: bytes=x-y 来实现获取对象内容的一部分,更多信息,请参见 GetObject 文档

如何通过 API 判断对象是否发生变化?

TOS 服务提供了 HeadObject 接口来查询对象元数据,当对象存在时,会在响应头域中返回 ETagLast-Modified 代表对象数据的 Hash 值以及对象的最后上传时间。
使用 GetObject 或 CopyObject 接口时,可以通过 HTTP 协议定义的 If-Match 或 If-Unmodified-Since 语法确保仅在对象未发生变化时才执行操作。

如何通过 API 将对象从一个桶/账号转存到另一个桶/账号?

  • 相同地域:推荐您使用 CopyObject 或 UploadPartCopy 接口直接复制对象。区别如下:
    • CopyObject仅支持小于 5 GiB 的对象。
    • UploadPartCopy 通过分片复制的方式支持大于 5 GiB 的对象。
  • 跨区域:需要通过组合 GetObject 和 PutObject/UploadPart 实现一边读一边写来完成复制。

注意

相同地域或跨地域转存时,请确保您拥有源桶的读权限以及目标桶的写权限。

如何通过 API 修改对象存储类型?

  • 小于 5 GiB 的对象:可以使用 CopyObject 实现。
  • 大于 5 GiB 的对象,可以使用 CreateMultipartUpload/UploadPartCopy/CompleteMultipartUpload 的方式实现。

使用预签名 URL 请求 TOS API 报错 403 是为什么?

403 错误通常是因为参与签名的关键字段与实际 HTTP 请求时发送的字段是否匹配,例如方法名(GET/HEAD/PUT/POST/DELETE)、请求 Query 参数、请求的头域等,更多信息,请参见 URL 中包含签名

预签名 URL 的有效期是多久?

TOS 服务端支持使用最大 7 天有效期的预签名 URL,生成预签名 URL 的方法,请参见 URL 中包含签名。推荐您使用 TOS SDK 的 PreSignedURL 函数来生成预签名。