跳转到内容

上传

最后更新 2026年11月9日

浏览器和 App 用你的服务器签发的地址,直接上传到你的 upload 域名。地址里写定了文件放在哪里、最大多大、接受哪些类型以及何时过期。

参数 含义
exp 过期时间,Unix 时间(秒,UTC)
max_bytes 允许的最大字节数
types 接受的 Content-Type,小写,多个用 , 分隔,例如 image/png,image/jpeg

用 PUT 把文件发到签名地址,带 Content-Type 和 Content-Length,不接受分块传输编码。binedge 按顺序检查:

  1. 签名、key 前缀和过期时间。
  2. Content-Type(去掉 ; 之后的参数)在 types 里。
  3. Content-Length 不超过 max_bytes。
  4. 文件开头的字节与声明的类型一致。声明 image/png 但不是 PNG 的文件会被拒绝。text/plain、application/octet-stream 这类无法从内容识别的类型不做这项检查。

返回 200 且正文为空表示文件已存好。任一检查不通过,或正文没传完连接就断开,都不会留下文件。同一个 key 再次上传会覆盖原文件。单个请求最多 300 MB,更大的文件用分片续传。

binedge 实现了 tus 1.0 的 creation 与 expiration 扩展,tus-js-client、TUSKit、tus-android-client 等客户端可以直接使用。把签名上传地址作为创建端点。

请求 行为
POST 签名地址 创建上传。带 Tus-Resumable: 1.0.0、Upload-Length(1 到 max_bytes),Upload-Metadata 里的 filetype 必须在 types 里。返回 201 和 Location
HEAD Location 返回 Upload-Offset、Upload-Length 和 Upload-Expires
PATCH Location 带 Content-Type: application/offset+octet-stream 和当前 Upload-Offset 发送下一段。返回 204 和新的偏移
  • 分片大小取 8 MiB 的整数倍,建议 64 MiB。
  • 只保存完整的 8 MiB 片。一次 PATCH 在一片中间结束时,返回的 Upload-Offset 是最后一个完整片的末尾,客户端从那里重发。
  • 上传在创建后 24 小时内可以续传,过期后未完成的部分会被清掉。
  • PATCH 返回 409 时先 HEAD 读当前偏移,再从那里继续。
HTTP 含义
404 上传已过期或已不存在
409 Upload-Offset 与已保存的字节数不一致
412 缺少 Tus-Resumable,或不是 1.0.0
413 Upload-Length 超过 max_bytes,或正文超过 Upload-Length
423 同一个上传正有另一个 PATCH 在写

upload 域名的所有响应都允许任意来源,并向脚本开放 tus 相关响应头(Location、Upload-Offset、Upload-Length、Upload-Expires、Tus-Resumable、Tus-Version、Tus-Extension)。凭据只在地址的签名里,上传不使用 cookie。

binedge 不会回调你的服务器。上传成功后由 App 告诉你的服务器,和其他上传一样,你的服务器保存这个 key。