文件上传 API 使用说明
本文面向接入 NewAPI 的下游开发者,说明如何申请临时上传地址并将文件直接上传到对象存储。1. 接口概览
文件上传分为两个请求:- 调用 NewAPI 获取临时上传地址。
- 使用临时地址将文件直接
PUT到对象存储。
将
https://your-new-api.example.com 替换为实际 NewAPI 服务地址。
2. 获取上传地址
2.1 请求
2.2 请求参数
filename 只用于保留安全的扩展名,服务端不会直接使用它作为对象路径。对象路径由服务端生成,调用方不能指定或覆盖对象键。
2.3 成功响应
HTTP 状态码为200:
url 是临时敏感信息,不要长期写入日志或公开分享。expires_at 只表示上传 URL 的有效期,不代表文件会在该时间自动删除。
3. 上传文件
获取响应后,使用method、url 和 headers 上传文件。
3.1 curl
UPLOAD_URL 是响应中的 url。如果响应的 headers 包含其他字段,也必须一并发送。
3.2 Node.js
Node.js 18 及以上版本可以使用项目提供的客户端:3.3 浏览器
浏览器上传时,先由后端或前端服务调用预签名接口,再使用返回的 URL 上传:PUT CORS 请求,并允许上传时使用的请求头,例如 Content-Type。
4. 上传成功后的文件地址
上传成功后,业务侧至少保存object_key。public_url 是否能直接访问取决于 TOS 权限:
- Bucket 或对象允许公共读:可以直接使用
public_url。 - Bucket 为私有:访问
public_url会返回403,需要由业务后端另外生成GET预签名下载 URL。
object_key 或 public_url。
5. 错误处理
5.1 NewAPI 响应错误
5.2 TOS 上传响应错误
预签名 URL 过期后不可复用。重试时必须重新调用
/v1/upload/presign。
6. 调用频率限制
预签名接口默认按 API Key 对应的令牌 ID进行限流:- 每个 API Key 默认每 60 秒最多申请 100 个预签名 URL。
- 不同 API Key 分别计算,不会因为共用同一个 OpenResty、NAT 或代理 IP 而共享额度。
- 实际文件从客户端直传 TOS 的
PUT请求不计入此限制。 - 只有调用
POST /v1/upload/presign才会消耗额度。
429 Too Many Requests,客户端应等待一段时间后重新申请 URL,不要在短时间内无限重试。
7. 安全要求
- NewAPI Key 只发送给 NewAPI,不要放入 TOS
PUT请求。 - 不要把
TOS_ACCESS_KEY或TOS_SECRET_KEY放到客户端代码中。 - 不要修改预签名 URL 的查询参数。
- 生产环境调用 NewAPI 应使用 HTTPS。
- 不要把完整的预签名 URL 写入长期日志。
- 私有文件不要依赖
public_url,应保存object_key并通过后端授权下载。