← 返回 8秒笔记 8秒笔记

NOTES · 期刊

CloudFlare ImgBed API 说明文档

发布于 2026/09/30 10:37 · 更新于 2026/09/30 10:37

CloudFlare ImgBed API 说明文档

来源:CloudFlare ImgBed 官方文档(https://cfbed.sanyue.de)
项目:CloudFlare-ImgBed
收录接口:上传 API · 读取 API · 列出 API · 随机图 API
文档整理日期:2026-09-30

目录

  1. 接口总览
  2. 上传 API
  3. 读取 API
  4. 列出 API
  5. 随机图 API
  6. 附录:相关文档

1. 接口总览

接口

端点

方法

认证

用途

上传 API

/upload

POST

上传认证码或 API Token(upload 权限)

上传文件(普通 / 分块 / HuggingFace 直传)

读取 API

/file/{path}

GET、HEAD

通常无需认证

读取文件、Range 分段、图片缩放

列出 API

/api/manage/list

GET

API Token(list 权限)

文件列表、搜索、筛选、统计

随机图 API

/random

GET

需开启随机图功能

随机获取图片 / 视频


2. 上传 API

来源:https://cfbed.sanyue.de/api/upload.html

上传 API 支持通过第三方上传文件至 CloudFlare ImgBed,便于集成到各种应用和服务中。

2.1 基本信息

项目

说明

端点

/upload

方法

POST

认证

上传认证码或 API Token(需要 upload 权限)

内容类型

multipart/form-data

2.2 响应格式

[
  {
    "src": "/file/abc123_image.jpg",
    "publicUrl": "https://img.example.com/abc123_image.jpg"
  }
]

上传成功响应为数组,常见字段如下:

字段名

类型

说明

src

string

文件访问路径。默认不包含域名,如 /file/abc123_image.jpg;使用 returnFormat=full 时返回当前站点完整链接

publicUrl

string

可选。普通上传、分块合并成功时,若已在「系统设置 → 网页设置 → 全局设置 → 默认 URL 前缀」设置了默认的 URL 前缀,则返回该前缀拼接文件 ID 的公开访问链接

2.3 普通上传

直接通过 /upload 端点上传文件,适用于小文件。

Query 参数

参数名

类型

必需

默认值

说明

authCode

string

否

-

上传认证码

uploadChannel

string

否

telegram

上传渠道:telegram、cfr2、s3、discord、huggingface、webdav

channelName

string

否

-

指定渠道名称(多渠道场景),可通过 /api/channels 获取可用列表

serverCompress

boolean

否

true

服务端压缩(仅 Telegram 渠道图片)

autoRetry

boolean

否

true

失败时自动切换渠道重试

uploadNameType

string

否

default

命名方式:default(前缀_原名)、index(仅前缀)、origin(仅原名)、short(短链接)

returnFormat

string

否

default

返回格式:default(/file/id)、full(完整链接)

uploadFolder

string

否

-

上传目录,相对路径,如 img/test

Body 参数(FormData)

参数名

类型

必需

说明

file

File

是

要上传的文件

示例

curl -X POST 'https://your.domain/upload?authCode=YOUR_CODE&uploadChannel=telegram' \
  -F 'file=@"/path/to/image.jpg"'

文件大小限制

部署 / 渠道

限制

Cloudflare Pages 部署

单次请求体上限 100MB

Telegram 渠道

单文件上限 20MB(超过自动服务端分片)

Discord 渠道

免费 10MB / Nitro 25MB

HuggingFace 渠道

普通上传走后端代理,受 CF Workers CPU 时间限制,建议大文件使用直传方式

2.4 分块上传(Telegram / R2 / S3 / Discord)

当文件较大时,客户端可将文件切分为多个分块,逐块上传后由服务端合并。适用于 telegram、cfr2、s3、discord 四个渠道。

注意:HuggingFace 渠道不支持分块上传,有独立的大文件直传流程(见 2.5)。

推荐分块大小

渠道

推荐分块大小

说明

telegram

16MB

Telegram Bot getFile 下载限制 20MB,留 4MB 安全余量

cfr2 / s3

5MB - 20MB

遵循 S3 Multipart Upload 规范,最小 5MB

discord

8MB

免费用户 10MB 限制,留余量

上传流程

分块上传分为三步:初始化 → 逐块上传 → 合并。

第一步:初始化

创建上传会话,获取 uploadId。

Query 参数:

参数名

类型

必需

说明

authCode

string

否

上传认证码

initChunked

boolean

是

固定为 true

uploadChannel

string

否

上传渠道:telegram、cfr2、s3、discord

channelName

string

否

指定渠道名称(多渠道场景)

Body 参数(FormData):

参数名

类型

必需

说明

originalFileName

string

是

原始文件名

originalFileType

string

是

原始文件 MIME 类型

totalChunks

integer

是

分块总数

请求示例:

POST /upload?authCode=YOUR_CODE&initChunked=true&uploadChannel=telegram
Content-Type: multipart/form-data

FormData:
  originalFileName: "video.mp4"
  originalFileType: "video/mp4"
  totalChunks: 5

响应示例:

{
  "success": true,
  "uploadId": "upload_1713500000000_abc123def",
  "sessionInfo": {
    "uploadId": "upload_1713500000000_abc123def",
    "originalFileName": "video.mp4",
    "totalChunks": 5,
    "uploadChannel": "telegram"
  }
}
第二步:逐块上传

将文件按推荐大小切分,依次上传每个分块。每个请求是同步的,服务端会等待分块上传到存储端后才响应。

Query 参数:

参数名

类型

必需

说明

authCode

string

否

上传认证码

chunked

boolean

是

固定为 true

uploadChannel

string

否

上传渠道

channelName

string

否

指定渠道名称

Body 参数(FormData):

参数名

类型

必需

说明

file

File

是

分块二进制数据

uploadId

string

是

初始化返回的上传会话 ID

chunkIndex

integer

是

分块索引,从 0 开始

totalChunks

integer

是

分块总数

originalFileName

string

是

原始文件名

originalFileType

string

是

原始文件 MIME 类型

请求示例:

POST /upload?authCode=YOUR_CODE&chunked=true&uploadChannel=telegram
Content-Type: multipart/form-data

FormData:
  file: <分块二进制数据>
  uploadId: "upload_1713500000000_abc123def"
  chunkIndex: 0
  totalChunks: 5
  originalFileName: "video.mp4"
  originalFileType: "video/mp4"

响应示例:

{
  "success": true,
  "message": "Chunk 1/5 received and being uploaded",
  "uploadId": "upload_1713500000000_abc123def",
  "chunkIndex": 0
}
并发上传:各分块可并发上传以提升速度。对于 R2/S3 渠道,第一个分块(chunkIndex=0)会初始化 Multipart Upload,其他分块会自动等待初始化完成(最多等待 60 秒)。
第三步:合并

所有分块上传完成后,请求合并。合并过程是同步的。

Query 参数:

参数名

类型

必需

说明

authCode

string

否

上传认证码

chunked

boolean

是

固定为 true

merge

boolean

是

固定为 true

uploadChannel

string

否

上传渠道

channelName

string

否

指定渠道名称

returnFormat

string

否

返回格式:default、full

uploadFolder

string

否

上传目录

Body 参数(FormData):

参数名

类型

必需

说明

uploadId

string

是

上传会话 ID

totalChunks

integer

是

分块总数

originalFileName

string

是

原始文件名

originalFileType

string

是

原始文件 MIME 类型

请求示例:

POST /upload?authCode=YOUR_CODE&chunked=true&merge=true&uploadChannel=telegram
Content-Type: multipart/form-data

FormData:
  uploadId: "upload_1713500000000_abc123def"
  totalChunks: 5
  originalFileName: "video.mp4"
  originalFileType: "video/mp4"

响应示例:

[
  {
    "src": "/file/1713500000000_video.mp4",
    "publicUrl": "https://img.example.com/1713500000000_video.mp4"
  }
]
失败重试:合并时服务端会自动检查各分块状态,对失败或超时的分块进行重试(最多 5 次)。如果仍有分块未完成,合并会返回错误。
清理请求

如果上传中途取消,可发送清理请求释放临时数据。

Query 参数:

参数名

类型

必需

说明

authCode

string

否

上传认证码

cleanup

boolean

是

固定为 true

uploadId

string

是

上传会话 ID

totalChunks

integer

是

分块总数

POST /upload?authCode=YOUR_CODE&cleanup=true&uploadId=xxx&totalChunks=5

2.5 HuggingFace 大文件直传

HuggingFace 渠道采用独立的上传流程,文件由客户端直接上传到 HuggingFace LFS 存储,CF Workers 仅负责签名和提交,从而绕过 Cloudflare 的 100MB 请求体限制和 CPU 时间限制。

上传方式选择

场景

方式

说明

小文件(< 20MB)

普通上传 /upload?uploadChannel=huggingface

文件经由后端代理上传

大文件(≥ 20MB)

直传流程(三步)

客户端直传 HuggingFace S3,后端只做签名和提交

前置准备

客户端需要预先计算:

第一步:获取上传 URL

请求参数(JSON Body):

参数名

类型

必需

说明

fileName

string

是

文件名

fileType

string

是

文件 MIME 类型

fileSize

integer

是

文件大小(字节)

sha256

string

是

文件 SHA-256 哈希(hex)

fileSample

string

是

文件前 512 字节的 Base64

channelName

string

否

指定渠道名称

uploadNameType

string

否

命名方式

uploadFolder

string

否

上传目录

请求示例:

POST /upload/huggingface/getUploadUrl
Content-Type: application/json
Authorization: Bearer <API_TOKEN>

{
  "fileName": "large-video.mp4",
  "fileType": "video/mp4",
  "fileSize": 524288000,
  "sha256": "e3b0c44298fc1c149afbf4c8996fb924...",
  "fileSample": "AAAAIGZ0eXBpc29t...",
  "channelName": "my-hf-channel",
  "uploadNameType": "default",
  "uploadFolder": "videos"
}

响应示例:

{
  "success": true,
  "fullId": "videos/1713500000000_large-video.mp4",
  "filePath": "videos/a1b2c3d4_1713500000000_large-video.mp4",
  "channelName": "my-hf-channel",
  "repo": "username/repo-name",
  "needsLfs": true,
  "alreadyExists": false,
  "oid": "e3b0c44298fc1c149afbf4c8996fb924...",
  "uploadAction": {
    "href": "https://s3.amazonaws.com/...",
    "header": { }
  }
}

关键字段说明:

字段

含义

needsLfs: false

文件无需 LFS(极小的文本文件),直接跳到第三步提交

alreadyExists: true

文件已存在于 LFS,跳过第二步直接提交

uploadAction.header.chunk_size

如果存在此字段,说明 HuggingFace 要求分片上传,header 中的零填充数字键("00001", "00002", ...)为各分片的预签名上传 URL

第二步:上传文件到 HuggingFace S3

根据 uploadAction 返回的信息,客户端直接上传到 HuggingFace 的 S3 存储。

基本上传(无 chunk_size):

PUT <uploadAction.href>
Headers: <uploadAction.header>
Body: <文件二进制内容>

分片上传(有 chunk_size):

将文件按 chunk_size 切分,依次 PUT 到 header["00001"]、header["00002"] ... 对应的 URL,收集每个响应的 ETag。全部上传完成后,POST 到 uploadAction.href 完成合并:

POST <uploadAction.href>
Content-Type: application/vnd.git-lfs+json

{
  "oid": "<sha256>",
  "parts": [
    { "partNumber": 1, "etag": "\"abc123\"" },
    { "partNumber": 2, "etag": "\"def456\"" }
  ]
}

第三步:提交文件引用

上传完成后,调用提交接口将文件注册到系统数据库。

请求参数(JSON Body):

参数名

类型

必需

说明

fullId

string

是

第一步返回的文件 ID

filePath

string

是

第一步返回的存储路径

sha256

string

是

文件 SHA-256 哈希(hex)

fileSize

integer

是

文件大小(字节)

fileName

string

否

文件名

fileType

string

否

文件 MIME 类型

channelName

string

否

指定渠道名称

请求示例:

POST /upload/huggingface/commitUpload
Content-Type: application/json
Authorization: Bearer <API_TOKEN>

{
  "fullId": "videos/1713500000000_large-video.mp4",
  "filePath": "videos/a1b2c3d4_1713500000000_large-video.mp4",
  "sha256": "e3b0c44298fc1c149afbf4c8996fb924...",
  "fileSize": 524288000,
  "fileName": "large-video.mp4",
  "fileType": "video/mp4",
  "channelName": "my-hf-channel"
}

响应示例:

{
  "success": true,
  "src": "/file/videos/1713500000000_large-video.mp4",
  "publicUrl": "https://img.example.com/videos/1713500000000_large-video.mp4",
  "fileUrl": "https://huggingface.co/datasets/username/repo-name/resolve/main/videos/a1b2c3d4_1713500000000_large-video.mp4",
  "fullId": "videos/1713500000000_large-video.mp4"
}

3. 读取 API

来源:https://cfbed.sanyue.de/api/file.html

读取 API 用于通过统一路径访问已经存储在 CloudFlare ImgBed 中的文件。接口支持各存储渠道的文件读取、HEAD 请求、Range 分段读取,以及按 URL 参数缩放图片。

3.1 基本信息

项目

说明

端点

/file/{path}

方法

GET、HEAD

认证

普通文件通常无需认证;实际访问仍受域名白名单、文件黑白名单和内容审查配置限制

响应内容

文件二进制内容

3.2 请求参数

路径参数

参数名

类型

必需

说明

path

string

是

文件路径,例如 photo.jpg 或 album/2026/photo.jpg;路径中的特殊字符应进行 URL 编码

Query 参数

参数名

类型

必需

默认值

说明

width

integer

否

-

图片最大宽度,取值范围 1–4096;可单独使用,此时保持原始宽高比

height

integer

否

-

图片最大高度,取值范围 1–4096;可单独使用,此时保持原始宽高比

fit

string

否

-

同时设置宽高时的适配方式:cover 按比例居中裁剪,squeeze 拉伸到指定尺寸;必须与 width、height 一起使用

fallback

string

否

-

仅支持 original;格式不受当前部署支持、源文件超限或处理失败时返回原文件;必须与图片尺寸参数一起使用

from

string

否

-

设为 admin 时表示管理端预览,需要管理权限;普通文件读取不应设置此参数

尺寸约束行为:

请求头

请求头

必需

说明

Range

否

请求原文件的指定字节范围。不能与图片尺寸处理参数同时使用

Referer

否

配置来源域名限制后用于防盗链检查

Authorization

否

仅管理端预览等受保护场景需要

3.3 图片尺寸处理

注意
格式支持:JPEG、PNG 和 WebP 可在所有部署方式中处理;AVIF 仅 Worker 和 Docker 支持,Pages 默认返回 415;GIF 仅 Docker 支持并保持 GIF 格式,Pages 和 Worker 默认返回 415;SVG 及其他格式不支持。
大小限制:Worker 和 Docker 的待处理源文件最大为 20 MB;Pages 以 Cloudflare Images 当前限制为准。
失败回退:使用 fallback=original 可在格式不支持、源文件超限或处理失败时返回原文件。
配置说明:图片尺寸处理默认关闭,使用前请在「配置说明 → 安全设置 → 访问管理」中开启功能并配置允许尺寸。
实际兼容性:实际支持情况以各渠道测试为准。

各部署方式格式支持一览

格式

Pages

Worker

Docker

JPEG / PNG / WebP

✅

✅

✅

AVIF

❌(返回 415)

✅

✅

GIF

❌(返回 415)

❌(返回 415)

✅(保持 GIF 格式)

SVG 及其他

❌

❌

❌

3.4 响应

成功的 GET 请求返回文件或处理后图片的二进制内容,Content-Type 根据实际输出格式设置;HEAD 请求只返回响应头。

原文件的有效 Range 请求返回 206 Partial Content。

常见响应头

响应头

说明

Content-Type

文件或处理后图片的 MIME 类型

Content-Disposition

默认为内联展示,并包含文件名

Cache-Control

文件对应的缓存策略;尺寸处理不会改变原有策略

Access-Control-Allow-Origin

值为 *,允许跨域读取

3.5 错误状态码

状态码

说明

400

文件路径无法解码,尺寸或 fallback 参数无效、重复或缺少必要搭配,或尺寸处理与 Range 请求同时使用

401

管理端预览未授权

403

文件被访问规则拦截,或图片尺寸处理功能未开启

404

文件不存在

405

带尺寸参数的请求使用了 GET 以外的方法

413

Worker 或 Docker 的待处理源文件超过 20 MB,且未设置 fallback=original

415

当前部署不支持处理该图片格式,且未设置 fallback=original

416

Range 请求的范围无效(适用于支持分段读取的存储渠道)

422

图片处理失败,且未设置 fallback=original

500

存储配置异常、源文件读取失败或分片文件重组失败

501

当前部署未配置可用的图片处理器,且未设置 fallback=original

3.6 示例

读取原文件

curl --location 'https://your.domain/file/album/example.jpg' \
  --output example.jpg

按固定尺寸居中裁剪

<img
  src="https://your.domain/file/album/example.jpg?width=640&height=480&fit=cover&fallback=original"
  alt="示例图片"
>

仅限制宽度(保持宽高比)

curl 'https://your.domain/file/album/example.jpg?width=640' -o thumb.jpg

Range 分段读取

curl -H 'Range: bytes=0-1023' \
  'https://your.domain/file/album/example.jpg' \
  --output chunk.bin

4. 列出 API

来源:https://cfbed.sanyue.de/api/list.html

列表 API 支持获取 CloudFlare ImgBed 中的文件列表。

4.1 基本信息

项目

说明

端点

/api/manage/list

方法

GET

认证

需要 list 权限

内容类型

application/json

4.2 请求参数(Query)

参数名

类型

必需

默认值

说明

start

number

否

0

起始位置,用于分页

count

number

否

50

返回数量,-1 表示不限制数量

sum

boolean

否

false

是否只返回总数统计(count 为 -1 时生效)

recursive

boolean

否

false

是否递归获取子目录下的文件

dir

string

否

""

指定目录路径

search

string

否

""

搜索关键词,支持文件名搜索

includeTags

string

否

""

包含标签筛选,多个标签用逗号分隔,文件必须包含所有指定标签

excludeTags

string

否

""

排除标签筛选,多个标签用逗号分隔,文件不能包含任何指定标签

channel

string

否

""

筛选存储渠道,多个值用逗号分隔:TelegramNew、CloudflareR2、S3、Discord、HuggingFace、External

channelName

string

否

""

筛选渠道名称,多个值用逗号分隔

listType

string

否

""

黑白名单筛选:White(白名单)、Block(黑名单)、None(未设置)

accessStatus

string

否

""

访问状态筛选:normal(正常)、blocked(已屏蔽)

label

string

否

""

审查结果筛选:normal(正常)、teen(12+内容)、adult(成人内容)

fileType

string

否

""

文件类型筛选:image、video、audio、other

action

string

否

""

特殊操作:rebuild、info、merge-operations、delete-operations、index-storage-stats

4.3 功能说明

普通文件列表查询

获取指定目录下的文件和子目录列表,支持分页、搜索和筛选。

统计查询

当 count=-1 且 sum=true 时,只返回文件总数统计(指定目录和子目录下的文件)。

递归查询

当 recursive=true 时,递归获取子目录下的所有文件。

标签筛选

支持通过标签对文件进行精确筛选:

其他维度筛选

渠道筛选 (channel)

按存储渠道筛选文件,支持多选(OR 逻辑):

值

含义

TelegramNew

Telegram

CloudflareR2

Cloudflare R2

S3

S3

Discord

Discord

HuggingFace

HuggingFace

External

外链

示例:channel=TelegramNew,CloudflareR2 返回存储在 Telegram 或 Cloudflare R2 的文件。

渠道名称筛选 (channelName)

按具体渠道名称筛选,支持多选(OR 逻辑)。渠道名称是用户自定义的存储渠道标识。

支持的格式:

类型标识:TelegramNew、CloudflareR2、S3、Discord、HuggingFace

示例:

黑白名单筛选 (listType)

按文件的黑白名单状态筛选,支持多选(OR 逻辑):

值

含义

White

白名单文件

Block

黑名单文件

None

未设置(包括空值、undefined、null 或字符串 'None')

示例:listType=White,None 返回白名单或未设置的文件。

访问状态筛选 (accessStatus)

按文件的访问状态筛选,支持多选(OR 逻辑):

值

含义

normal

正常(可访问)

blocked

已屏蔽(不可访问)

判断逻辑:

注意:白名单优先,即使审查结果是成人内容(Label === 'adult'),只要在白名单中(ListType === 'White')就是正常状态。
审查结果筛选 (label)

按内容审查结果筛选,支持多选(OR 逻辑):

值

含义

normal

正常内容(匹配 Label 为 'everyone', 'None', '', null, undefined)

teen

12+ 内容(匹配 Label 为 'teen')

adult

成人内容(匹配 Label 为 'adult')

文件类型筛选 (fileType)

按文件 MIME 类型筛选,支持多选(OR 逻辑):

值

含义

image

图片(FileType 以 image/ 开头)

video

视频(FileType 以 video/ 开头)

audio

音频(FileType 以 audio/ 开头)

other

其他(不属于以上三类)

组合筛选

所有筛选参数可以组合使用,实现复杂的查询需求。例如:

/api/manage/list?listType=White&fileType=image&channel=TelegramNew&accessStatus=normal

返回:白名单 + 图片 + Telegram 渠道 + 正常访问状态的文件。

特殊操作

action

说明

rebuild

异步重建文件索引,提高查询性能

info

获取索引的基本信息和状态

merge-operations

合并操作

delete-operations

删除操作

index-storage-stats

索引存储统计

4.4 响应格式

普通列表响应

{
  "files": [
    {
      "name": "example/image.jpg",
      "metadata": {
        "Channel": "telegram",
        "TimeStamp": "1754020094217",
        "File-Mime": "image/jpeg",
        "File-Size": "1024000"
      }
    }
  ],
  "directories": [
    "example/subfolder"
  ],
  "totalCount": 100,
  "returnedCount": 50,
  "indexLastUpdated": "1754020094217",
  "isIndexedResponse": true
}

字段

说明

totalCount

指定目录和子目录下的文件总数

returnedCount

实际返回的文件数量

统计响应

{
  "sum": 100,
  "indexLastUpdated": "1754020094217"
}

索引信息响应

{
  "totalFiles": 100,
  "lastUpdated": "1754020094217",
  "channelStats": {
    "telegram": 20
  },
  "directoryStats": {
    "/": 30
  },
  "typeStats": {
    "None": 20
  },
  "oldestFile": {},
  "newestFile": {}
}

错误响应

{
  "error": "Internal server error",
  "message": "详细错误信息"
}

4.5 示例

获取文件列表

curl --location --request GET 'https://your.domain/api/manage/list?start=0&count=50' \
  --header 'Authorization: Bearer your_token'

搜索文件

curl --location --request GET 'https://your.domain/api/manage/list?search=image&count=20' \
  --header 'Authorization: Bearer your_token'

获取指定目录

curl --location --request GET 'https://your.domain/api/manage/list?dir=photos/2024' \
  --header 'Authorization: Bearer your_token'

按存储渠道筛选

curl --location --request GET 'https://your.domain/api/manage/list?channel=TelegramNew' \
  --header 'Authorization: Bearer your_token'

按黑白名单筛选

# 获取白名单文件
curl --location --request GET 'https://your.domain/api/manage/list?listType=White' \
  --header 'Authorization: Bearer your_token'

按访问状态筛选

# 获取所有正常访问的文件
curl --location --request GET 'https://your.domain/api/manage/list?accessStatus=normal' \
  --header 'Authorization: Bearer your_token'

# 获取所有已屏蔽的文件
curl --location --request GET 'https://your.domain/api/manage/list?accessStatus=blocked' \
  --header 'Authorization: Bearer your_token'

按文件类型筛选

# 获取所有图片文件
curl --location --request GET 'https://your.domain/api/manage/list?fileType=image' \
  --header 'Authorization: Bearer your_token'

# 获取图片和视频文件
curl --location --request GET 'https://your.domain/api/manage/list?fileType=image,video' \
  --header 'Authorization: Bearer your_token'

按审查结果筛选

# 获取正常内容的文件
curl --location --request GET 'https://your.domain/api/manage/list?label=normal' \
  --header 'Authorization: Bearer your_token'

按渠道名称筛选

# 获取特定渠道名称的文件
curl --location --request GET 'https://your.domain/api/manage/list?channelName=default' \
  --header 'Authorization: Bearer your_token'

# 获取特定类型和名称的渠道文件(推荐)
curl --location --request GET 'https://your.domain/api/manage/list?channelName=TelegramNew:default' \
  --header 'Authorization: Bearer your_token'

# 获取多个渠道的文件
curl --location --request GET 'https://your.domain/api/manage/list?channelName=TelegramNew:default,S3:backup' \
  --header 'Authorization: Bearer your_token'

组合筛选

# 白名单 + 图片 + Telegram 渠道
curl --location --request GET 'https://your.domain/api/manage/list?listType=White&fileType=image&channel=TelegramNew' \
  --header 'Authorization: Bearer your_token'

# 正常访问状态 + 图片类型
curl --location --request GET 'https://your.domain/api/manage/list?accessStatus=normal&fileType=image' \
  --header 'Authorization: Bearer your_token'

获取总数统计

curl --location --request GET 'https://your.domain/api/manage/list?count=-1&sum=true' \
  --header 'Authorization: Bearer your_token'

重建索引

curl --location --request GET 'https://your.domain/api/manage/list?action=rebuild' \
  --header 'Authorization: Bearer your_token'

按标签筛选

# 包含特定标签的文件
curl --location --request GET 'https://your.domain/api/manage/list?includeTags=风景,旅行' \
  --header 'Authorization: Bearer your_token'
# 排除特定标签的文件
curl --location --request GET 'https://your.domain/api/manage/list?excludeTags=私密,草稿' \
  --header 'Authorization: Bearer your_token'
# 组合使用:包含「风景」标签但排除「草稿」标签
curl --location --request GET 'https://your.domain/api/manage/list?includeTags=风景&excludeTags=草稿' \
  --header 'Authorization: Bearer your_token'

5. 随机图 API

来源:https://cfbed.sanyue.de/api/random.html

随机图 API 允许您从图床中随机获取一张图片,适用于网站背景、占位图等场景。

5.1 基本信息

项目

说明

端点

/random

方法

GET

前置条件

需要开启随机图功能

5.2 请求参数

参数名

类型

必需

默认值

说明

content

string

否

image

文件类型过滤,可选值 [image, video],多个使用 , 分隔

type

string

否

path

返回内容类型:img 直接返回图片(此时 form 不生效),url 返回完整 url 链接

form

string

否

json

响应格式,设为 text 时直接返回文本

dir

string

否

-

指定目录,使用相对路径,例如 img/test 会返回该目录以及所有子目录下的文件

orientation

string

否

-

图片方向筛选:landscape(横图)、portrait(竖图)、square(方图)、auto(自适应设备方向)

5.3 响应格式

  1. 当 type 为 img 时:返回格式为 image/jpeg
  2. 当 type 为其他值时:
    • 当 form 不是 text 时,返回 JSON 格式内容,data.url 为返回的链接/文件路径
    • 当 form 是 text 时,直接返回链接/文件路径

5.4 示例

基本请求

curl --location --request GET 'https://your.domain/random'

获取横图

curl --location --request GET 'https://your.domain/random?orientation=landscape'

获取指定目录的竖图

curl --location --request GET 'https://your.domain/random?dir=wallpaper&orientation=portrait'

直接返回图片

curl --location --request GET 'https://your.domain/random?type=img&orientation=landscape'

响应示例

{
  "url": "/file/4fab4d423d039b4665a27.jpg"
}

5.5 使用场景

网站随机背景

<img src="https://your.domain/random?type=img&orientation=landscape" alt="随机背景">

CSS 背景图

.hero {
  background-image: url('https://your.domain/random?type=img&orientation=landscape');
  background-size: cover;
}

手机壁纸 API

https://your.domain/random?type=img&dir=mobile&orientation=portrait

自适应设备方向

curl --location --request GET 'https://your.domain/random?orientation=auto'

5.6 orientation=auto 自适应模式

当 orientation 设为 auto 时,API 会根据请求设备自动判断并返回合适方向的图片。

检测策略

  1. Client Hints(优先):如果浏览器发送了 Sec-CH-Viewport-Width 和 Sec-CH-Viewport-Height 请求头,API 会根据视口宽高比判断方向:
    • 宽高比 > 1.1 → 横图(landscape)
    • 宽高比 < 0.9 → 竖图(portrait)
    • 0.9 ≤ 宽高比 ≤ 1.1 → 方图(square)
  2. User-Agent(回退):如果没有 Client Hints,API 会解析 User-Agent 判断设备类型:
    • 移动设备 → 竖图(portrait)
    • 桌面设备 → 横图(landscape)
  3. 无法判断:如果两种方式都无法判断,则不进行方向过滤,返回任意方向的图片。

响应头

自适应模式下,响应会包含以下额外头信息,以便浏览器在后续请求中发送 Client Hints:

降级处理


6. 附录:相关文档

文档

链接

API 基本介绍

https://cfbed.sanyue.de/api/index.html

上传 API

https://cfbed.sanyue.de/api/upload.html

读取 API

https://cfbed.sanyue.de/api/file.html

删除 API

https://cfbed.sanyue.de/api/delete.html

列出 API

https://cfbed.sanyue.de/api/list.html

随机图 API

https://cfbed.sanyue.de/api/random.html

Token 管理 API

https://cfbed.sanyue.de/api/token.html

WebDAV

https://cfbed.sanyue.de/api/webdav.html

配置说明

https://cfbed.sanyue.de/deployment/configuration.html


本文档根据 CloudFlare ImgBed 官方文档整理(上传 / 读取 / 列出 / 随机图),内容以官方文档为准。