跳转到主要内容
POST

使用指南

  • 该接口使用标准的 multipart/form-data 格式直接上传文件
  • 支持直接从本地存储上传文件,并自动识别文件类型
  • 最适合从桌面应用、移动应用或网页表单上传本地文件
  • 文件可通过返回的 URL 立即访问。图片保留 72 小时;视频存储在 temp/videos 生命周期前缀下时保留 24 小时

参数详情

  • 文件上传要求:
    • file 字段必须包含二进制文件数据
    • 支持的图片格式:JPEG、PNG、GIF、WebP
    • 支持的视频格式:MP4、WebM、MOV/QuickTime、AVI、MKV
    • 上传数量上限:每次请求 1 个文件。视频不超过 100MB
    • 系统会根据二进制数据自动识别文件类型
  • 参数命名约定:
    • 该接口同时支持 snake_case 和 camelCase 命名
    • upload_path 或 uploadPath,两者均可
    • file_name 或 fileName,两者均可
    • 使用与你应用代码风格一致的命名方式即可
  • 存储配置:
    • 所有文件在存储路径中都会自动加上 temp/ 前缀
    • 如果指定 upload_path: "photos",实际路径为 temp/photos
    • 图片在上传 72 小时后过期并自动删除
    • 使用默认路径上传的视频存储在 temp/videos/ 下,在为该前缀配置了 R2 生命周期规则时,24 小时后过期
  • 文件命名:
    • 如果未提供 file_name,系统会按以下格式生成唯一文件名:{timestamp}_{random}_{extension}
    • 自动生成的文件名示例:20251229130857_a8B9cD2e.png

开发者说明

  • 适合使用文件流上传的情况:
    • 从用户本地存储直接上传文件
    • 网页应用中基于表单的文件上传
    • 移动应用文件上传
    • 服务器之间的文件传输
  • 对于已经存储在磁盘上的文件,这是效率最高的上传方式
  • multipart/form-data 格式是所有编程语言和 HTTP 客户端通用的标准格式
  • 如需持久保存,请在过期前将文件下载到本地:图片 72 小时,视频 24 小时

速率限制与配额

  • 速率限制:每个已认证用户、每个上传接口,在 60 秒固定窗口内最多 10 次请求
  • 超出速率限制时,会收到 429 Too Many Requests 错误
  • 固定窗口从窗口内第一次请求开始计算,同一用户的 JWT 请求和 API Key 请求共享该窗口
  • 使用指数退避重试逻辑处理速率限制错误

常见错误场景

  • 缺少文件:请求体中没有提供文件(422 错误)
  • 不支持的文件类型:上传的文件不是支持的图片格式(JPEG、PNG、GIF、WebP)或视频格式(MP4、WebM、MOV/QuickTime、AVI、MKV)
  • 视频过大:上传的视频超过 100MB 限制(413 错误)
  • 空文件:上传的文件为 0 字节或已损坏
  • 认证错误:Authorization 请求头中的 API Key 缺失或无效

使用示例

cURL 示例

Python 示例

JavaScript 示例(Node.js)

视频上传示例

使用默认路径上传的视频存储在 temp/videos/ 下。请为该前缀配置 R2 生命周期规则,使对象在 1 天后过期。

授权

Authorization
string
header
必填

所有 API 接口都需要 Bearer Token 认证。

创建 API Key:登录 PoYo,进入 仪表盘 → API 密钥(poyo.ai/zh/dashboard/api-key),点击创建 Key。

在请求头中添加:

请求体

multipart/form-data
file
file
必填

要上传的文件二进制数据。

支持的图片格式:JPEG、PNG、GIF、WebP

支持的视频格式:MP4、WebM、QuickTime/MOV、AVI、MKV

上限:每次请求 1 个文件。视频最大 100MB。

保留时长:图片 72 小时后过期。存储在 temp/videos 生命周期前缀下的视频 24 小时后过期。

注意:系统会自动识别文件类型并分类。

upload_path
string

自定义存储目录路径。

支持两种命名方式:

  • snake_case:upload_path
  • camelCase:uploadPath

未指定时,系统使用 temp。使用默认 temp 路径的视频会存储为 temp/videos。

注意:API 路由会把自定义路径统一归到 temp/ 前缀下。

示例:

"photos"

file_name
string

上传文件的自定义文件名。

支持两种命名方式:

  • snake_case:file_name
  • camelCase:fileName

未指定时,系统会按以下格式生成唯一文件名:{timestamp}_{random}_{extension}

自动生成的文件名示例:20251229130857_a8B9cD2e.png

示例:

"photo.png"

响应

文件上传成功

success
boolean
必填

上传是否成功

示例:

true

code
enum<integer>
必填

业务状态码。200 表示成功,其他值都表示请求失败。请务必检查这个字段:部分参数校验错误会以 HTTP 200 返回,响应体里的 code 为 400。

  • 200:成功
  • 400:请求参数无效
  • 401:API Key 缺失或无效
  • 402:积分不足
  • 403:没有权限
  • 404:资源不存在
  • 408:请求超时
  • 429:请求频率超限
  • 500:服务器内部错误
  • 502:上游服务错误
  • 503:服务暂不可用

详见错误码。

可用选项:
200,
400,
401,
402,
403,
404,
408,
429,
500,
502,
503
示例:

200

msg
string
必填

响应消息

示例:

"File uploaded successfully"

data
object
必填