← 返回首页

📖 API 文档

流星快传 API 开放平台 — 通过 API 调用文件分享和 P2P 直传服务

📑 目录

🔐 认证方式

所有 API 请求需要在 Authorization 头中携带 API Key:

Authorization: Bearer ms_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

获取 API Key:

  1. 注册并升级为 Pro 会员
  2. 访问 API 密钥管理 创建密钥
  3. 密钥只显示一次,请妥善保存
⚠️ 请勿在客户端代码(前端 JS)中暴露 API Key。API Key 应仅在服务器端使用。

⏱️ 速率限制

限制项Pro 用户
请求频率100 次/分钟
单文件大小最大 2 GB
活跃文件数30 个
存储空间5 GB

响应头中包含速率限制信息:

X-RateLimit-Limit: 100        # 窗口内最大请求数
X-RateLimit-Remaining: 95     # 剩余请求数
X-RateLimit-Reset: 1719648000 # 窗口重置时间(Unix 时间戳)

❌ 错误处理

所有错误响应格式统一:

{
  "ok": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "请求过于频繁,请在 30 秒后重试"
  }
}
错误码HTTP 状态说明
UNAUTHORIZED401缺少或无效的 API Key
FORBIDDEN403Pro 到期或 Key 已禁用
NOT_FOUND404资源不存在
VALIDATION_ERROR422参数校验失败
RATE_LIMIT_EXCEEDED429超过速率限制
FILE_TOO_LARGE413文件超过大小限制
INTERNAL_ERROR500服务器内部错误

📁 文件管理 API

POST /api/v1/files/upload

上传文件,支持所有格式(屏蔽可执行文件)。小文件推荐使用此接口,大文件(>100MB)建议使用分片上传。

Content-Type: multipart/form-data

参数类型必填说明
fileFile文件内容
expireString有效期:10m/30m/1h/6h/12h/1d/3d/7d/custom,默认 1h
customMinutesNumber自定义分钟数(expire=custom 时必填,1~10080)
passwordString提取码(最多 20 字符)
downloadLimitNumber下载次数限制(0=无限制)
aliasString自定义短链(3-20位,字母/数字/下划线/横线)
descriptionString文件备注/描述
burnAfterReadBoolean阅后即焚
bandwidthLimitNumber带宽限制(bytes/sec)

示例:

curl -X POST https://meteorsend.top/api/v1/files/upload \
  -H "Authorization: Bearer ms_live_xxx" \
  -F "file=@report.pdf" \
  -F "expire=1d" \
  -F "password=mypass" \
  -F "description=季度报告"

响应:

{
  "ok": true,
  "data": {
    "code": "aB3x7Kp9",
    "alias": null,
    "url": "https://meteorsend.top/d/aB3x7Kp9",
    "manageUrl": "https://meteorsend.top/m/abc123def456",
    "expireAt": 1719648000000,
    "size": 2048576,
    "name": "report.pdf",
    "hasPassword": true,
    "burnAfterRead": false,
    "description": "季度报告"
  }
}

POST /api/v1/files/upload-chunk/init

初始化分片上传,返回 uploadId 用于后续分片上传。

参数类型必填说明
fileNameString文件名
fileSizeNumber文件总大小(bytes)
totalChunksNumber总分片数

POST /api/v1/files/upload-chunk/:uploadId

上传单个分片。

参数类型必填说明
indexNumber分片序号(从 0 开始)
chunkFile分片数据

POST /api/v1/files/upload-chunk/:uploadId/complete

完成分片上传,合并所有分片。

参数类型必填说明
expireString有效期(同上传接口)
passwordString提取码
descriptionString备注

GET /api/v1/files

列出当前用户的所有有效文件。

参数类型必填说明
pageNumber页码,默认 1
limitNumber每页数量,默认 20,最大 100

响应:

{
  "ok": true,
  "data": {
    "files": [
      {
        "code": "aB3x7Kp9",
        "name": "report.pdf",
        "size": 2048576,
        "downloadCount": 3,
        "expireAt": 1719648000000,
        "createdAt": 1719561600000,
        "hasPassword": true,
        "description": "季度报告"
      }
    ],
    "total": 15,
    "page": 1,
    "pages": 1
  }
}

GET /api/v1/files/:code

获取单个文件的详细信息。


PUT /api/v1/files/:code

更新文件设置(密码、有效期、别名、描述等)。

参数类型必填说明
aliasString新别名(空字符串清除)
passwordString新密码(空字符串清除)
downloadLimitNumber下载次数限制
expireNumber从现在起延期(分钟)
descriptionString备注

DELETE /api/v1/files/:code

删除文件(移入回收站,24h 内可恢复)。


GET /api/v1/files/:code/download

获取带签名的临时下载 URL。URL 有效期 1 小时,可直接用于下载,无需额外认证。

响应:

{
  "ok": true,
  "data": {
    "downloadUrl": "https://meteorsend.top/dl/aB3x7Kp9?sig=xxx&exp=1719648000",
    "expiresIn": 3600,
    "fileName": "report.pdf",
    "fileSize": 2048576
  }
}

⚡ P2P 直传 API

P2P 直传 API 用于通过编程方式创建和管理 P2P 传输房间。创建 Room 后,接收方可以通过生成的链接在浏览器中接收文件。

POST /api/v1/p2p/rooms

创建 P2P 传输 Room。

参数类型必填说明
fileNameString文件名
fileSizeNumber文件大小(bytes,用于显示)
passwordString提取码

响应:

{
  "ok": true,
  "data": {
    "roomId": "xK9mP2qR",
    "shareUrl": "https://meteorsend.top/p2p/xK9mP2qR",
    "expiresAt": 1719565200000,
    "status": "waiting"
  }
}
💡 创建 Room 后,发送方需要通过 WebSocket (/ws/webrtc) 连接并等待接收方加入。详情参考 P2P 信令协议。

GET /api/v1/p2p/rooms/:roomId

查询 Room 状态(是否已有接收方连接、传输进度等)。

DELETE /api/v1/p2p/rooms/:roomId

关闭 Room,断开所有连接。

👤 账户信息 API

GET /api/v1/account

获取当前 API Key 对应的账户信息。

响应:

{
  "ok": true,
  "data": {
    "username": "test01",
    "vipLevel": 1,
    "vipExpire": 1719648000000,
    "storageUsed": 104857600,
    "storageLimit": 5368709120,
    "activeFiles": 5,
    "totalFiles": 12,
    "tierName": "pro",
    "maxFileSize": 2147483648,
    "maxExpire": 604800000,
    "maxActive": 30
  }
}