返回对象 主站
Developer Reference · Save.YUAZ.CLUB

API  文档

Object Storage · Token Auth · HTTP
开始使用 Get Started(如果您不嫌弃的话,就从这儿开始吧)
不好意思,先跟您说明一下:这个对象存储 API ,是面向各位开发者和用户的。麻烦您先到 save.yuaz.club 的「API 令牌」页面,把您自己的令牌先生成好(也就是申请一下),然后调用的时候,在请求头里带上 Authorization: Bearer <save_token>,这样一来,您就可以轻轻松松地操作您自己的对象!
read帮您查看对象列表与用量(您安心就好)
download帮您下载对象,连私有的也能一并取来
upload帮您上传对象(没错,就是这么简单)
delete帮您把对象删除掉,请您放心使用
好消息是,令牌它还可以限定目录!只要您勾选了某一个目录,那么这张令牌就只会老老实实地去访问该 `folder` 下面的对象,特别适合用来按项目做权限隔离,是不是挺贴心的?
接口 Endpoints(烦请随我的指引慢慢看)
POST /api/save/objects — 上传对象(麻烦您工作)
请注意,这里要用 multipart/form-data 字段,包括 file、folder(可选的)、visibility(public 或 private,默认就是 public)。
要是想给已有的对象上传新版本,请再带上 objectId(那个对象的 ID)和可选的 v(版本号,留空就自动在最大的版本号上加一)。弄好之后,会贴心地为您返回对象的 id、版本号和下载链接,真的很省心!
GET /api/save/objects — 我的对象列表(您的一大堆宝贝)
好,它会为您返回对象数组,还有您个人和站点的用量统计;如果您用的是目录受限的令牌,那就只会返回它所在目录下的对象,抱歉不是故意小气的。
PATCH /api/save/objects/:id — 修改对象(稍作调整~)
这里,使用的是 JSON,您可以改 visibility(public 或 private),还有 folder。改完之后,会额外为您奉上一个新的分享口令,敬请查收!
DELETE /api/save/objects/:id — 删除对象(郑重地帮您清理)
会帮您把这个对象,连同它所占用的一大片空间,一起妥妥帖帖地删除干净,您大可放心。
GET /o/:id — 下载对象(这就帮您取来)
公开的对象,您直接访问就可以,完全没问题;要是私有的对象,那就得麻烦您带上 Authorization: Bearer <token>,或者使用 ?st=<分享口令> 来访问,谢谢您的配合!
GET /api/save/objects/:id/versions — 查看对象的所有版本
每个版本都有独立的版本号、大小和文件名。返回里会标明哪个版本是「当前」版本(也就是不指定版本时下载到的那个),请您放心。
PATCH /api/save/objects/:id — 切换当前版本
在 JSON 里放上 {"current": 2} 这样的内容,就能把当前版本切到 v2。从这以后,不带 ?v 的下载都会拿到 v2 的内容。
DELETE /api/save/objects/:id/versions/:v — 删除某个版本
删掉指定版本。如果删掉的是当前版本,系统会体贴地自动切到现存最高的版本;若是最后一个版本被删掉,整个对象也就一起清除了。
请求与响应示例 Request / Response
POST /api/save/objects — 上传对象
请求:multipart/form-data,字段 file、folder(可选)、visibility(public|private)、objectId(可选,给已有对象传版本)、v(可选,版本号)
# 请求(带令牌)
POST /api/save/objects HTTP/1.1
Host: save.yuaz.club
Authorization: Bearer save_xxxx.xxxx
Content-Type: multipart/form-data; boundary=----xyz

------xyz
Content-Disposition: form-data; name="file"; filename="photo.jpg"
Content-Type: application/octet-stream

<二进制文件内容>
------xyz
Content-Disposition: form-data; name="folder"

images
------xyz
Content-Disposition: form-data; name="visibility"

public
------xyz--

# 响应
HTTP/1.1 200 OK
{
  "success": true,
  "id": "3f2a9c1d8b6e44a7",
  "name": "photo.jpg",
  "folder": "images",
  "version": 1,
  "current": 1,
  "size": 24576,
  "totalSize": 24576,
  "versionCount": 1,
  "visibility": "public",
  "url": "https://save.yuaz.club/o/3f2a9c1d8b6e44a7",
  "directUrl": "https://save.yuaz.club/o/3f2a9c1d8b6e44a7"
}
GET /api/save/objects — 我的对象列表
请求:无需请求体,带令牌即可。响应会返回对象数组以及个人/站点用量。
# 请求(带令牌)
GET /api/save/objects HTTP/1.1
Host: save.yuaz.club
Authorization: Bearer save_xxxx.xxxx

# 响应
HTTP/1.1 200 OK
{
  "success": true,
  "used": 24576,
  "quota": 5368709120,
  "siteUsed": 24576,
  "siteLimit": 214748364800,
  "fmt": { "used": "24.0 KB", "quota": "5.00 GB", "siteUsed": "24.0 KB", "siteLimit": "200.00 GB" },
  "objects": [
    {
      "id": "3f2a9c1d8b6e44a7",
      "name": "photo.jpg",
      "folder": "images",
      "size": 24576,
      "visibility": "public",
      "created": 1787549000000,
      "versionCount": 1,
      "current": 1,
      "totalSize": 24576,
      "fmtTotalSize": "24.0 KB"
    }
  ]
}
GET /o/:id — 下载对象
请求:公开对象直接访问;私有对象带令牌或分享口令。可用 ?v=2 下载指定版本,缺省下载当前版本。
# 请求:下载公开对象
GET /o/3f2a9c1d8b6e44a7 HTTP/1.1
Host: save.yuaz.club

# 请求:下载私有对象(带令牌)
GET /o/3f2a9c1d8b6e44a7 HTTP/1.1
Host: save.yuaz.club
Authorization: Bearer save_xxxx.xxxx

# 请求:下载指定版本 v2
GET /o/3f2a9c1d8b6e44a7?v=2 HTTP/1.1
Host: save.yuaz.club

# 响应(文件内容,Content-Disposition 会带上文件名)
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="photo.jpg"

<文件二进制内容>
GET /api/save/objects/:id/versions — 查看版本列表
请求:带令牌即可,无需请求体。
# 请求
GET /api/save/objects/3f2a9c1d8b6e44a7/versions HTTP/1.1
Host: save.yuaz.club
Authorization: Bearer save_xxxx.xxxx

# 响应
HTTP/1.1 200 OK
{
  "success": true,
  "id": "3f2a9c1d8b6e44a7",
  "current": 3,
  "versions": [
    { "v": 1, "size": 20480, "fmtSize": "20.0 KB", "name": "photo.jpg",   "created": 1787549000000, "current": false },
    { "v": 2, "size": 23552, "fmtSize": "23.0 KB", "name": "photo-v2.jpg", "created": 1787549100000, "current": false },
    { "v": 3, "size": 24576, "fmtSize": "24.0 KB", "name": "photo-v3.jpg", "created": 1787549200000, "current": true }
  ]
}
示例 curl
# 上传一下对象(麻烦请用您自己的令牌,谢谢)
curl -X POST https://save.yuaz.club/api/save/objects \
  -H "Authorization: Bearer save_xxxx.xxxx" \
  -F "file=@photo.jpg" -F "folder=images" -F "visibility=public"

# 列出我的对象(帮您罗列出来看一看)
curl -H "Authorization: Bearer save_xxxx.xxxx" \
  https://save.yuaz.club/api/save/objects

# 下载您的公开对象(轻轻松松就到手了)
curl -O https://save.yuaz.club/o/<object_id>

# 下载私有对象(请带好您的令牌,抱歉麻烦您了)
curl -O https://save.yuaz.club/o/<object_id> \
  -H "Authorization: Bearer save_xxxx.xxxx"

# 给已有对象上传新版本(版本号会自动 +1,例如 v1 之后自动变成 v2)
curl -X POST https://save.yuaz.club/api/save/objects \
  -H "Authorization: Bearer save_xxxx.xxxx" \
  -F "file=@photo-v2.jpg" -F "objectId=<object_id>"

# 下载指定版本 v2
curl -O "https://save.yuaz.club/o/<object_id>?v=2"

# 列出所有版本
curl -H "Authorization: Bearer save_xxxx.xxxx" \
  https://save.yuaz.club/api/save/objects/<object_id>/versions

# 把当前版本切到 v1
curl -X PATCH https://save.yuaz.club/api/save/objects/<object_id> \
  -H "Authorization: Bearer save_xxxx.xxxx" \
  -H "Content-Type: application/json" \
  -d '{"current": 1}'
YUAZ CLUB 郑重承诺(请您放一百个心)
请放心,永久免费,不向您收一分钱 · 我们绝不偷偷查看您的隐私 · 我们只认认真真地负责安全存储(别的真的啥也不干)