Skip to main content

put(file, options)

put() 上传一个文件并返回新对象。

输入

对象的扩展名依次取自 filename、路径的文件名部分或 File 的名称。字节和普通 Blob 没有名称,因此上传它们时请传入 filename(例如 "data.json")。
在 Node.js 中,无法打开的路径会抛出普通的 Error(Cannot open file: <path>,原始错误位于 cause 中)。在浏览器中,传入路径会更早失败,抛出导入 node:fs 时的错误。请改用来自 <input type="file"> 的 File。

选项

完整的服务器端规则请参见 Object Post。

结果

简单上传和分片上传

put() 根据文件大小选择上传流程: 每个文件必须至少 512 字节;更小的文件会以 FILE_TOO_SMALL 失败。规则或上传令牌的 max_size,或者你的存储配额,可能会降低 10 GiB 的上限。

分片上传的执行过程

  1. SDK 启动上传,服务器返回其分片限制(max_size、max_parts)。
  2. 文件被拆分为大小为 min(max_size, max(16 MiB, ceil(size / max_parts))) 字节的分片。一个分片通常为 16 MiB 或更大,但当服务器的 max_size 更小时,分片也会更小。
  3. 分片每次并发发送 6 个,这是服务器对进行中分片的限制。失败的分片会在 maxRetries 范围内重试。
  4. 所有分片到达后,SDK 完成上传。
如果某个分片最终失败,或完成上传失败,SDK 会等待仍在进行中的分片,然后中止上传,确保中止之后不会再有分片到达。原始错误会被抛出。不支持续传:请重新调用 put()。
分片上传不会检查 overwrite: false 或 checksum_sha256。它始终会替换同名的现有对象。
一个账户最多可以有 32 个未完成的分片上传(与 S3 网关共享);再多一个会以 TOO_MANY_OPEN_UPLOADS 失败。由于每个账户的分片每次并发发送 6 个,请一次只运行一个大文件上传。

从浏览器上传

切勿将 API 密钥发送到浏览器。应由你的服务器生成一个短期有效的上传令牌,浏览器再使用该令牌上传。
使用令牌创建的客户端只能调用 put(),包括分片上传。其他任何方法都会以 403 UPLOAD_TOKEN_NOT_ALLOWED 失败。

uploadTokens.create(options)

令牌会固定其生成时使用的每一个选项。 它返回 { token, expires_at, max_uses }。服务器端规则请参见 Upload Tokens。
uploadTokens.create() 是一个写操作,只有一次尝试:它永远不会被重试。