Skip to main content
Blob Storage 在 https://s3-blob.squarecloud.app 上提供 S3 API。任何允许设置自定义 endpoint 的工具都可以使用:aws-cli、boto3、AWS SDK for JavaScript、rclone、Cyberduck 以及大多数备份工具。

凭证

S3 工具使用访问密钥对为请求签名。请从 S3 凭证获取:
该密钥对由你的 API key 派生,无需单独管理:撤销或重新生成 key 会对密钥对产生同样的效果,并且密钥对拥有相同的 scope。只有 blob:read 的 key 会得到只读的密钥对。 只要 API key 不变,密钥对就不会变,因此获取一次后将其保存在你的密钥管理器或环境变量中。不要在每次启动时调用该路由:它每小时只接受 10 次请求。

Bucket

你的账户可以看到三个固定的 bucket。你无法创建或删除 bucket。 public 或 private bucket 中的 key 是不含你的 user id 的对象路径:public bucket 中的 images/logo.png 就是 REST API 上的对象 pub/<user_id>/images/logo.png。通过 S3 写入的文件会出现在 REST API 和控制台中,反之亦然。

配置

boto3 生成预签名 URL 时需要 signature_version="s3v4":否则 generate_presigned_url 会使用较旧的 SigV2 签名,而网关不接受 SigV2。预签名 URL 的有效期最长为 7 天(604800 秒)。
网关的响应永远不会在边缘缓存。预签名 URL 会在过期、API key 被撤销或对象被删除时立即失效。

支持的操作

Bucket 策略、CORS、生命周期、网站、加密、对象锁定、版本、日志、通知、复制、ACL 和标签写入、按 partNumber 的 GET 以及浏览器 POST 表单上传均返回 501 NotImplemented。生命周期规则请使用账户设置。

Key

  • Key 是字面路径。一个 key 最长约 1000 字节:1024 字节的上限也把账户前缀计算在内。更长的 key 会返回 KeyTooLongError,其消息会给出你可用的确切字节数。路径段不能为空,也不能是 . 或 ..。
  • 以 / 结尾的 0 字节 key 是文件夹标记,与 AWS 控制台创建文件夹的方式相同。
  • 分发时的 Content-Type 由扩展名推导,与 REST API 相同。可执行文件会被拒绝并返回 InvalidArgument,.html、.svg 和 .xml 以下载方式分发。

元数据、缓存与过期

  • x-amz-meta-* 请求头在 Pro 和 Enterprise 计划上会被保留(最多 5 个键和 512 字节,否则返回 MetadataTooLarge)。在其他计划上它们会被丢弃。
  • Cache-Control 和 Content-Disposition 会被保留。在 Enterprise 之外,不缓存的 Cache-Control(no-cache、no-store 或 max-age=0)会被拒绝并返回 AccessDenied。
  • 按前缀设置的规则同样适用于通过 S3 写入的对象,包括自动删除。规则的 max_size 和 extensions 仅适用于 REST 上传。

限制

超出限制后,网关返回 SlowDown(HTTP 503),AWS SDK 会自动退避并重试。S3 请求不计入你所在计划的 API 请求限制。 在循环重试之前,请先检查密钥对:发送过多无效凭证的 IP 会被封禁几分钟。

分段大小

分段上传工具会自动拆分大文件;请让每个分段保持在 80 MB 或以下。AWS CLI(8 MB)和 rclone(5 MB)的默认值已经符合要求。
写入需要付费计划。没有付费计划时,以及在只读的 legacy bucket 上,写入会返回 AccessDenied。存储配额与 REST API 一样适用。

错误

网关返回标准的 S3 XML 错误,因此 SDK 可以原生处理: