DKFile API 对接文档 v1.1.2
免费的 HTML 文件托管与 REST API:单文件上传、文件夹项目、我的数据库、表单收集、图床与数据托管等能力。
概述
DKFile API 基于 REST 架构设计,使用标准的 HTTP 方法和状态码。所有请求和响应均使用 JSON 格式。
基础URL
https://dkfile.com/dkfile_api
- ✅ 正确:
https://dkfile.net/dkfile_api/files - ❌ 错误:
http://dkfile.net/dkfile_api/files(会返回协议错误)
如果使用 HTTP 访问,API 会返回 JSON 格式的错误信息,错误码:ERR_PARAM_HTTPS_REQUIRED (1116)
认证方式
DKFile API 支持两种认证方式,您可以根据使用场景选择合适的方式:
方式一:API密钥认证(推荐)
获取API密钥
- 登录DKFile网站
- 访问 API密钥管理页面
- 点击"创建新密钥"按钮
- 输入密钥名称,选择过期时间(可选)
- 保存生成的密钥(只显示一次,请妥善保管)
使用方法
在HTTP请求头中添加 Authorization 字段:
# Python示例
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
# 上传文件
files = {'file': open('dkfile.html', 'rb')}
data = {'project_name': '我的项目'}
response = requests.post(
'https://dkfile.com/dkfile_api/upload',
headers=headers,
files=files,
data=data
)
print(response.json())
# cURL示例 curl -s -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]" \ -F "project_name=我的项目" | python3 -m json.tool
优点
- ✅ 无需登录,直接使用密钥
- ✅ 适合自动化脚本和后台服务
- ✅ 可以随时撤销和重新生成
- ✅ 支持设置过期时间
- ✅ 便于权限管理和审计
方式二:Session认证(兼容模式)
使用方法
- 在浏览器中登录DKFile网站
- 登录后浏览器会自动保存Session Cookie
- 使用同一会话(浏览器或requests.Session)调用API
# Python示例
import requests
# 创建会话
session = requests.Session()
# 登录
login_url = 'https://dkfile.com/login'
login_data = {'username': 'your_username', 'password': 'your_password'}
session.post(login_url, data=login_data)
# 调用API(自动携带Cookie)
response = session.post(
'https://dkfile.com/dkfile_api/upload',
files={'file': open('dkfile.html', 'rb')},
data={'project_name': '我的项目'}
)
print(response.json())
// JavaScript示例(网站前端)
// 用户已登录,Cookie自动携带
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('project_name', '我的项目');
fetch('https://dkfile.com/dkfile_api/upload', {
method: 'POST',
credentials: 'include', // 重要:包含Cookie
body: formData
})
.then(response => response.json())
.then(data => console.log(data));
优点
- ✅ 前端JavaScript可以直接调用
- ✅ 无需管理额外的API密钥
- ✅ 适合浏览器环境快速测试
缺点
- ❌ Cookie会过期,需要重新登录
- ❌ 不适合后台自动化脚本
- ❌ 第三方集成不便
- 后端服务、自动化脚本 → 使用 API密钥认证
- 网站前端JavaScript → 使用 Session认证
- 快速测试 → 两种方式都可以
API密钥管理
如果您选择使用API密钥认证,需要先获取API密钥。以下是获取和管理API密钥的详细步骤:
访问API密钥管理页面,创建、查看和管理您的API密钥
获取API密钥步骤
登录账户
确保您已经登录到DKFile账户
创建新密钥
点击"创建新密钥"按钮,输入密钥名称和过期时间(可选)
保存密钥
重要:密钥只显示一次,请立即复制并妥善保存
密钥管理功能
创建密钥
创建新的API密钥,支持自定义名称和过期时间
查看密钥
查看所有API密钥的列表和状态信息
启用/禁用
随时启用或禁用API密钥,无需删除
删除密钥
永久删除不再需要的API密钥
安全建议
- API密钥具有完整的账户权限,请妥善保管
- 不要在代码中硬编码API密钥,使用环境变量
- 定期轮换API密钥,提高安全性
- 不要将API密钥提交到版本控制系统
- 如果密钥泄露,请立即删除并创建新密钥
使用限制
| 限制项 | 限制值 | 说明 |
|---|---|---|
| 密钥数量 | 最多10个 | 每个用户最多可创建10个API密钥 |
| 密钥长度 | 64字符 | API密钥为64位随机字符串 |
| 过期时间 | 可选设置 | 可设置1天到1年的过期时间,或永不过期 |
| 权限范围 | 完整权限 | API密钥具有与登录用户相同的权限 |
点击按钮将在新标签页中打开API密钥管理页面
文件上传
上传单个 HTML 文件到DKFile平台(与主站单页上传规则一致,仅支持 .html / .htm)。需要上传 CSS、JS、图片等其他静态资源时,请改用 「文件夹项目」 功能。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | File | 必填 | 要上传的文件对象 |
| project_name | String | 选填 | 项目名称,默认使用文件名 |
| description | String | 选填 | 文件描述信息 |
文件更新逻辑
智能文件管理
DKFile API 支持智能文件管理,当上传同名文件时会自动更新现有文件:
- 首次上传:创建新的文件记录
- 重复上传:更新现有文件记录,保持数据连续性
- 文件访问:使用相同的URL访问,确保链接稳定性
- 数据保护:保留原有的项目名称、描述等元数据
响应字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| file_name | String | 原始文件名 |
| project_name | String | 项目名称 |
| file_size | Integer | 文件大小(字节) |
| url | String | 文件访问地址(格式:/{username}/{filename}) |
| created_at | String | 创建时间(北京时间,格式:YYYY-MM-DD HH:MM:SS) |
| updated_at | String | 更新时间(北京时间,仅文件更新时返回) |
| is_update | Boolean | 是否为文件更新(true:更新,false:新建) |
成功响应示例
200 OK首次上传响应
{
"success": true,
"message": "文件上传成功",
"data": {
"file_name": "dkfile.html",
"project_name": "我的项目",
"file_size": 2048,
"url": "https://dkfile.com/username/dkfile.html",
"created_at": "2025-01-01 20:00:00",
"updated_at": null,
"is_update": false
}
}
文件更新响应
{
"success": true,
"message": "文件更新成功",
"data": {
"file_name": "dkfile.html",
"project_name": "我的项目",
"file_size": 3072,
"url": "https://dkfile.com/username/dkfile.html",
"created_at": "2025-01-01 20:00:00",
"updated_at": "2025-01-01 21:30:00",
"is_update": true
}
}
错误响应示例
请求错误 (400)
400 Bad Request{
"success": false,
"message": "没有上传文件",
"error_code": "NO_FILE"
}
文件类型不允许 (400)
400 Bad Request{
"success": false,
"message": "文件验证失败: HTML上传只支持HTML文件,检测到MIME类型: image/png",
"error_code": "VALIDATION_FAILED"
}
API权限被禁用 (403)
403 Forbidden{
"success": false,
"message": "您的API调用权限已被禁用,请联系管理员",
"error_code": "API_PERMISSION_DENIED"
}
获取上传配置
获取当前用户的上传配置信息和配额
成功响应
200 OK{
"success": true,
"data": {
"max_file_size": 16777216,
"max_file_size_mb": 16.0,
"max_files_per_user": 100,
"current_file_count": 25,
"remaining_quota": 75,
"allowed_extensions": [".html", ".htm"],
"api_version": "1.0"
}
}
文件列表 API
使用 GET https://dkfile.com/dkfile_api/files 可拉取当前认证用户的文件信息,默认按照创建时间倒序返回,支持分页和模糊搜索。
获取文件列表
请求参数
| 参数 | 必填 | 类型 | 说明 |
|---|---|---|---|
| page | 否 | int | 页码,默认1,必须 ≥ 1 |
| per_page | 否 | int | 每页数量,范围1-100,默认20 |
| search | 否 | string | 模糊搜索 project_name/file_name |
| is_featured | 否 | string | 筛选精选文件,可选值:true/1(仅精选)、false/0(仅非精选)。不传则返回全部文件 |
示例
综合示例:使用所有参数
# cURL示例 - 获取第2页,每页10条,搜索关键词"landing",仅精选文件 curl -s -X GET "https://dkfile.com/dkfile_api/files?page=2&per_page=10&search=landing&is_featured=true" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool
# Python示例 - 使用所有参数
import requests
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
params = {
'page': 2, # 第2页
'per_page': 10, # 每页10条
'search': 'landing', # 搜索关键词
'is_featured': 'true' # 仅精选文件
}
resp = requests.get("https://dkfile.com/dkfile_api/files", headers=headers, params=params)
result = resp.json()
if result['success']:
print(f"总文件数: {result['data']['total']}")
print(f"当前页: {result['data']['page']}/{result['data']['total_pages']}")
for file in result['data']['files']:
print(f"- {file['project_name']} ({file['file_name']})")
else:
print(f"错误: {result['message']}")
// JavaScript (Fetch) 示例 - 使用所有参数
const API_KEY = 'YOUR_API_KEY';
const params = new URLSearchParams({
page: '2',
per_page: '10',
search: 'landing',
is_featured: 'true'
});
fetch(`https://dkfile.com/dkfile_api/files?${params.toString()}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_KEY}`
}
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log(`总文件数: ${data.data.total}`);
console.log(`当前页: ${data.data.page}/${data.data.total_pages}`);
data.data.files.forEach(file => {
console.log(`- ${file.project_name} (${file.file_name})`);
});
} else {
console.error('错误:', data.message);
}
})
.catch(error => {
console.error('请求失败:', error);
});
基础示例
获取所有文件(默认分页)
curl -s -X GET "https://dkfile.com/dkfile_api/files?per_page=20" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool
搜索文件
import requests
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
params = {'per_page': 20, 'search': 'landing'}
resp = requests.get("https://dkfile.com/dkfile_api/files", headers=headers, params=params)
print(resp.json())
仅获取精选文件
curl -s -X GET "https://dkfile.com/dkfile_api/files?is_featured=true&per_page=20" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool
import requests
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
params = {'is_featured': 'true', 'per_page': 20}
resp = requests.get("https://dkfile.com/dkfile_api/files", headers=headers, params=params)
print(resp.json())
成功响应
200 OK{
"success": true,
"data": {
"page": 1,
"per_page": 20,
"total": 42,
"total_pages": 3,
"files": [
{
"created_at": "2025-11-28T03:24:20.557917+00:00",
"file_name": "fanqiezhong.html",
"file_size": 11232,
"is_featured": false,
"project_name": "番茄钟",
"updated_at": null,
"url": "https://dkfile.net/IDOXU/fanqiezhong.html"
},
{
"created_at": "2025-11-06T17:20:17.858136+00:00",
"file_name": "24dian.html",
"file_size": 10194,
"is_featured": true,
"project_name": "24dian",
"updated_at": null,
"url": "https://dkfile.net/IDOXU/24dian.html"
}
]
}
}
url 会根据当前域名策略自动生成,可直接用于前端展示或分享。
文件夹项目 API
文件夹项目 API 用于操作整个项目目录(批量上传、文件列表、文件内容读取),适用于多文件项目的批量上传、自动部署等场景。
- 上传内容:文件夹 API 上传整个项目目录(支持 HTML/JS/CSS/图片等任意文件类型);单文件 API 仅支持单个 HTML 文件
- 上传方式:文件夹 API 支持一次请求上传多个文件(批量);单文件 API 一次只能上传一个文件
- 适用场景:文件夹 API 适合部署多文件项目(静态网站、工具合集等);单文件 API 适合发布独立的 HTML 页面
- 文件管理:文件夹 API 支持列出项目文件目录结构、读取文件内容,方便 CI/CD 后的验证
1. 批量上传文件
批量上传文件到文件夹项目 — 一次性上传多个文件,适用于 CI/CD 自动部署。文件夹如果不存在会自动创建。
替换 {folder_path} 为项目名称(如 my-blog)。如果需要指定用户名前缀,格式为 username/projectName。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| files[] | File[] | 必填 | 文件列表,支持同时上传多个文件 |
| overwrite_files | String | 选填 | 是否覆盖已存在文件,true 覆盖,false 返回冲突信息(默认 false) |
cURL 示例
# 批量上传 dist/ 目录中的所有文件到 my-blog 项目 curl -s -X POST "https://dkfile.com/api/folders/my-blog/batch_upload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "files[]=@dist/index.html" \ -F "files[]=@dist/assets/app.js" \ -F "files[]=@dist/assets/style.css" \ -F "overwrite_files=true" | python3 -m json.tool
Python 示例
import requests
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
files = [
('files[]', ('index.html', open('dist/index.html', 'rb'), 'text/html')),
('files[]', ('app.js', open('dist/assets/app.js', 'rb'), 'application/javascript')),
]
data = {'overwrite_files': 'true'}
resp = requests.post(
'https://dkfile.com/api/folders/my-blog/batch_upload',
headers=headers,
files=files,
data=data
)
print(resp.json())
Git Hook 自动部署示例
#!/bin/sh # .git/hooks/pre-push — Git 推送前自动构建并部署到 DKFile echo "🚀 开始构建..." npm run build echo "📦 部署到 DKFile..." curl -s -X POST "https://dkfile.com/api/folders/my-app/batch_upload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "files[]=@dist/index.html" \ -F "files[]=@dist/assets/app.js" \ -F "overwrite_files=true" echo "✅ 部署完成!"
成功响应
200 OK{
"success": true,
"message": "批量上传完成,成功: 5,失败: 0",
"uploaded_count": 5,
"failed_count": 0,
"failed_files": []
}
部分成功响应(同名文件冲突)
400 Bad Request{
"success": false,
"message": "所有文件上传失败",
"uploaded_count": 0,
"failed_count": 2,
"failed_files": ["index.html"],
"errors": [
{
"type": "duplicate",
"error_code": 1312,
"message": "文件 \"index.html\" 已存在,请设置 overwrite_files=true 覆盖",
"file": "index.html"
}
]
}
2. 获取文件列表
获取文件夹项目文件列表(递归) — 返回项目中所有文件及其相对路径、大小、修改时间。
替换 {folder_path} 为项目名称,例如:/api/folders/my-blog/files
cURL 示例
curl -s -X GET "https://dkfile.com/api/folders/my-blog/files" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool
成功响应
200 OK{
"success": true,
"files": [
{
"type": "file",
"name": "index.html",
"path": "index.html",
"size": 2048,
"modified": "2025-01-01T20:00:00",
"url": "/{user_id}/my-blog/index.html"
},
{
"type": "file",
"name": "app.js",
"path": "assets/app.js",
"size": 10240,
"modified": "2025-01-01T20:00:00",
"url": "/{user_id}/my-blog/assets/app.js"
}
],
"total_files": 2,
"folder_path": "my-blog",
"recursive": true
}
权限错误响应
403 Forbidden{
"success": false,
"error_code": 1312,
"error_type": "FILE_ERROR",
"message": "文件权限错误",
"solution": "服务器文件权限配置错误,请联系管理员",
"details": {
"info": "文件夹项目未激活或没有访问权限,需要先获取文件夹项目权限"
}
}
3. 读取文件内容
读取文件夹项目中的文件内容 — 用于自动化部署后的验证和调试。支持子目录路径(如 assets/app.js)。
替换 {folder_path} 为项目名称,{filepath} 为文件相对路径。
例如:/api/folders/my-blog/file/index.html 或 /api/folders/my-blog/file/assets/app.js
cURL 示例
# 读取 index.html curl -s -X GET "https://dkfile.com/api/folders/my-blog/file/index.html" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool # 读取 assets 目录下的 JS 文件 curl -s -X GET "https://dkfile.com/api/folders/my-blog/file/assets/app.js" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool
成功响应
200 OK{
"success": true,
"name": "index.html",
"path": "index.html",
"content": "\n\n...\n",
"size": 2048,
"modified": 1735732800.0,
"folder_path": "my-blog"
}
content 字段,仅返回元信息。二进制文件(如图片)的 content 为 null。
4. 发布文件夹项目 新增 v1.1.2
将文件夹项目设为已发布 — 发布后公网可通过 /{username}/{folder}/ 访问。批量上传不会自动发布,需显式调用本接口。
替换 {folder_path} 为项目名称(如 my-blog)。也可写 {username}/my-blog,但 username 必须是 API Key 所属用户自己。
文档备注:本接口为 v1.1.2(2026-09-03)新增,支持 API Key / Session,用于 CI 上传后显式发布。
index.html;只能发布自己的顶级文件夹项目。已发布再调用为幂等(返回 200,already_published: true)。
cURL 示例
# 上传完成后发布 curl -s -X POST "https://dkfile.com/api/folders/my-blog/publish" \ -H "Authorization: Bearer YOUR_API_KEY" | python3 -m json.tool
成功响应
200 OK{
"success": true,
"message": "发布成功!",
"website_url": "https://dkfile.com/yourname/my-blog/",
"is_published": true,
"already_published": false,
"access_control_type": "public"
}
典型 CI 流程
POST /api/folders/my-blog/batch_upload(上传 dist)POST /api/folders/my-blog/publish(对外可访问)- 浏览器打开返回的
website_url
我的数据库 API
键值对云端存储,适合计数器、排行榜、小 JSON 配置等活数据。管理页:/data-store。
认证
写入、私有读取、列表、删除需 API Key 或 Session(同域页面已登录可不带 Key)。公开读取无需认证。
Key 规范
- 英文字母开头,仅含
a-zA-Z0-9_-,最长 100 字符 - 同一用户下 Key 唯一;不同用户可重名
- 公开读取推荐:
GET https://dkfile.com/dkfile_api/data/public/{username}/{key},避免全站 Key 撞名
创建或更新数据。若 Key 已存在则更新 value;重命名 legacy Key 时传 old_key。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| key | 是 | string | 数据 Key |
| value | 是 | any | JSON 可序列化值,或文本/数字 |
| data_type | 否 | string | json / text / number,默认 json |
| tags | 否 | array | 标签数组 |
| is_public | 否 | bool | 是否允许公开读取,默认 false |
| old_key | 否 | string | 重命名时传原 Key(仅 legacy 不规范 Key 可改) |
curl -s -X POST "https://dkfile.com/dkfile_api/data/store" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"key":"page_views","value":128,"data_type":"number","is_public":true}'
读取当前用户私有数据(需认证)。
推荐公开读取,无需认证。响应 data 含 key、value、owner、updated_at 等。
// 页面 JS 示例(公开计数器)
fetch('https://dkfile.com/dkfile_api/data/public/YOUR_USERNAME/page_views')
.then(r => r.json())
.then(res => console.log(res.data.value));
兼容旧接口 GET https://dkfile.com/dkfile_api/data/public/{key}(仅按 Key 查全站,可能撞名,不推荐)。
列出当前用户全部 Key。Query:page(默认1)、per_page(1–100,默认50)。返回含 quota、usage。
删除指定 Key(需认证)。
1601–1606(DATA_ERROR),详见 数据/表单错误码。
表单收集 API
无后端 HTML 页面收集访客提交(留言、报名等)。管理页:/user-forms。
公开提交,无需认证,支持 CORS。访客在页面中 POST JSON 或 form-data。
fetch('https://dkfile.com/api/forms/submit/my-contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: '张三', email: '[email protected]', message: '你好' })
}).then(r => r.json()).then(console.log);
创建表单(需认证)。主要字段:form_name、form_slug(可选)、fields_config(数组)、allowed_origins、redirect_url、is_active。
更新表单配置(需认证)。
列出当前用户全部表单及配额 quota。
分页查看提交记录。Query:page、per_page、is_read(true/false)。
导出提交 JSON(受单次导出行数配额限制)。
删除表单及全部提交(需认证)。
标记提交已读/未读。Body:{"is_read": true}。
图床 API
独立图片托管(与 VIP 无关,需单独购买或兑换码)。管理页:/image-host。
公开访问
上传后每张图有固定 public_token,外链地址:
https://dkfile.com/dkfile-img/pub/{public_token}
# 兼容旧地址:https://dkfile.com/image-host/pub/{public_token}
权益状态、配额(张数/总容量/单张上限等)。
multipart/form-data,字段 file(可多文件)。成功返回 images[],含 public_token、public_url。
curl -s -X POST "https://dkfile.com/api/image-host/upload" \ -b "session=YOUR_SESSION_COOKIE" \ -F "[email protected]"
列出当前用户图片列表。
更新备注等元信息。
替换图片文件,外链 URL 不变(同 token 覆盖)。
删除图片(已锁定图片不可删)。
图床接口返回 {"success": false, "message": "..."},不使用 1600 段数字错误码。
数据托管 API
较大静态文本/JSON 文件托管,支持版本管理与公开直链。管理页:/hosted-data。
- 我的数据库:活数据,API 可读写,单条较小,适合计数/排行
- 数据托管:静数据,公开只读直链,单文件最大约 10MB,适合词库/配置包
公开直链
https://dkfile.com/dkfile-data/pub/{public_token}
# 兼容:https://dkfile.com/hosted-data/pub/{public_token}
# 返回当前默认版本的纯文件内容(非 JSON 包装)
权益状态、文件数/单文件大小/版本数配额。
文件列表,含 public_url、版本摘要。
文件详情及全部版本列表。
新建文件。支持 JSON Body:display_name、content、content_type;或 multipart/form-data 上传 UTF-8 文本文件。
上传新版本;可设为默认版本供公开直链读取。
切换公开直链使用的默认版本。
更新显示名称等元信息。
删除文件(已锁定不可删)。
数据托管接口同样使用 success + message 格式,不使用 1600 段数字错误码。
API速率限制
为确保服务稳定性和公平性,DKFile API实施智能速率限制,防止恶意调用系统。
限制规则
| 限制类型 | 默认用户 | 认证用户 | VIP用户 | 说明 |
|---|---|---|---|---|
| 每分钟请求 | 10次 | 60次 | 300次 | 基于API密钥或用户账号 |
| 每小时请求 | 100次 | 1000次 | 5000次 | 滑动窗口计算 |
| 每天请求 | 1000次 | 10000次 | 50000次 | 北京时间0点重置 |
| 并发请求 | 2个 | 10个 | 50个 | 同时进行的请求数 |
响应头信息
每次API响应会包含以下速率限制信息:
HTTP/1.1 200 OK X-RateLimit-Limit: 1000 # 小时限制 X-RateLimit-Remaining: 995 # 剩余次数 X-RateLimit-Reset: 1698765432 # 重置时间(Unix时间戳) X-RateLimit-Window: hour # 窗口类型(minute/hour/day)
超限响应
当超过速率限制时,会返回 429 Too Many Requests:
{
"success": false,
"error_code": 1203,
"error_type": "QUOTA_ERROR",
"message": "API请求频率超限(每小时)",
"solution": "请稍后再试,或升级账户获取更高限额",
"doc_link": "https://dkfile.com/api#rate-limits",
"retry_after": 3600, // 建议重试等待时间(秒)
"details": {
"current": 1001,
"limit": 1000,
"reset_time": "2025-10-25 15:00:00"
}
}
最佳实践
- ✅ 检查响应头:每次请求后检查
X-RateLimit-Remaining - ✅ 实现重试机制:超限后等待
retry_after秒再重试 - ✅ 使用队列:对批量上传使用队列控制速率
- ✅ 缓存结果:避免重复请求相同的数据
- ✅ 错峰上传:避开高峰时段,分散请求
错误码说明
DKFile API使用标准化的错误码体系,便于开发者快速定位和解决问题。
错误响应格式
{
"success": false,
"error_code": 1101, // 数字错误码
"error_type": "PARAM_ERROR", // 错误类型
"message": "缺少file参数", // 错误消息(中文)
"solution": "请在请求中包含file参数", // 解决方案
"doc_link": "https://dkfile.com/api#upload" // 文档链接
}
错误码分类
| 错误码范围 | 分类 | 说明 |
|---|---|---|
| 1000-1099 | 认证错误 | API密钥、Session、权限相关错误 |
| 1100-1199 | 参数错误 | 请求参数缺失、格式错误、验证失败 |
| 1200-1299 | 配额限制 | 速率限制、存储配额、文件数量限制 |
| 1300-1399 | 文件操作 | 文件读写、权限、状态相关错误 |
| 1400-1499 | 业务逻辑 | 业务规则验证、内容检测等错误 |
| 1500-1599 | 服务器错误 | 服务器内部错误、数据库错误、服务不可用 |
| 1600-1699 | 数据存储 / 表单 | 我的数据库、表单收集相关错误(见 下表) |
数据 / 表单错误码(1600–1619)
以下错误码用于 我的数据库 与 表单收集 API。响应中 error_code 供程序分支处理;面向用户的说明请看 message 与 solution。
| 错误码 | 错误类型 | 说明 | HTTP状态码 |
|---|---|---|---|
| 1601 | DATA_ERROR | data_key 超过 100 字符 | 400 |
| 1602 | DATA_ERROR | 单条数据内容超过当前账号大小上限(message 含具体限额与 VIP 提示) | 400 |
| 1603 | DATA_ERROR | 本账号下 data_key 已存在(重复 POST 同 key 会更新) | 400 |
| 1604 | DATA_ERROR | data_key 不存在;公开读请确认 username + key 且已勾选公开 | 404 |
| 1605 | DATA_ERROR | 可存 Key 条数已达账号配额上限(message 含当前/上限与 VIP 提示) | 400 |
| 1606 | DATA_ERROR | data_key 格式不符(须英文字母开头,仅字母数字 _ -) | 400 |
| 1610 | FORM_ERROR | 表单 slug 已被占用 | 400 |
| 1611 | FORM_ERROR | 表单不存在 | 404 |
| 1612 | FORM_ERROR | 表单已禁用 | 403 |
| 1613 | FORM_ERROR | 表单数量或月提交量配额已满(solution 含后台配置限额) | 429 |
| 1614 | FORM_ERROR | 提交字段不符合表单定义 | 400 |
1600、1607–1609、1615–1619 暂未分配,预留扩展。
常用错误码
| 错误码 | 错误类型 | 说明 | HTTP状态码 |
|---|---|---|---|
| 1001 | AUTH_ERROR | 缺少API密钥 | 401 |
| 1002 | AUTH_ERROR | API密钥无效 | 401 |
| 1006 | AUTH_ERROR | 账号已被禁用 | 403 |
| 1007 | AUTH_ERROR | API调用权限已被禁用 | 403 |
| 1101 | PARAM_ERROR | 缺少file参数 | 400 |
| 1103 | PARAM_ERROR | 文件内容为空 | 400 |
| 1104 | PARAM_ERROR | 文件大小超过限制 | 400 |
| 1105 | PARAM_ERROR | 文件类型不支持 | 400 |
| 1201 | QUOTA_ERROR | 文件数量已达上限 | 400 |
| 1203 | QUOTA_ERROR | API请求频率超限(每小时) | 429 |
| 1204 | QUOTA_ERROR | API请求频率超限(每分钟) | 429 |
| 1501 | SERVER_ERROR | 服务器内部错误 | 500 |
| 1503 | SERVER_ERROR | 存储服务不可用 | 503 |
客户端错误排查指南
以下是使用 curl 或其他 HTTP 客户端时常见的错误及解决方法:
| 错误信息 | 错误码 | 原因与解决方法 |
|---|---|---|
curl: (26) Failed to open/read local data from file/application
|
curl 26 |
原因:curl 无法读取本地文件 检查:
|
curl: (7) Failed to connect to localhost
|
curl 7 |
原因:无法连接到服务器 检查:
|
Redirecting to login page
|
302 |
原因:API Key 认证失败 检查:
|
{"success": false, "error_code": "NO_FILE"}
|
400 |
原因:服务器未接收到文件 检查:
|
{"success": false, "error_code": "EMPTY_FILE"}
|
400 |
原因:上传的文件内容为空 检查:
|
- 使用
curl -v参数查看详细的请求和响应信息 - 检查服务器返回的
error_code字段,对照上方的错误码表 - 先用简单的小文件测试,确认基本功能正常后再上传大文件
- 确认文件路径时可以先用
pwd查看当前目录
API版本信息
DKFile API遵循语义化版本控制,确保向后兼容性和平滑升级。
当前版本
发布日期:2025-11-01
更新日期:2026-09-03 (文档 v1.1.2)
核心功能
- ✅ 文件上传功能 (
POST /dkfile_api/upload) - ✅ 获取上传配置 (
GET /dkfile_api/upload/info) - ✅ API密钥认证支持
- ✅ Session认证支持
- ✅ 智能文件更新机制
- ✅ 200+详细错误码体系
- ✅ API速率限制保护
- ✅ 多语言响应支持(中文/英文)
- ✅ 文件夹项目API(批量上传、文件列表、文件内容读取、发布 新增 v1.1.2)
- ✅ 我的数据库 / 表单 / 图床 / 数据托管 API 文档(见左侧导航)
版本策略
| 策略项 | 说明 |
|---|---|
| 命名规则 | 使用语义化版本号(主版本.次版本.修订版本) |
| 支持周期 | 每个版本至少支持12个月 |
| 弃用通知 | 弃用通知至少提前3个月 |
| 下线通知 | 下线通知至少提前6个月 |
| 向后兼容 | 次版本更新保持向后兼容 |
| 重大变更 | 主版本更新可能包含不兼容变更 |
更新日志
📁 文件夹项目 API · 新增发布
- 新增
POST /api/folders/{folder_path}/publish:API Key / Session 均可调用 - 上传后需显式发布,公网才可通过
/{username}/{folder}/访问 - 仅能发布自己的顶级项目;需根目录
index.html;已发布再调用幂等 - 文档对应章节已标注「新增」与版本号,见 文件夹项目 API 第 4 节
📖 新增 API 对接文档
- 我的数据库 API:键值存储、公开读
/public/{username}/{key}、配额与 Key 规范 - 表单收集 API:公开提交、创建/管理、导出与已读标记
- 图床 API:上传、列表、替换、公开外链
/dkfile-img/pub/{token} - 数据托管 API:文件版本、公开直链
/dkfile-data/pub/{token} - 1600–1619 数据/表单错误码对照表(含 HTTP 状态与说明)
🖥️ 文档访问体验
- API 文档页改为全屏布局,正文区域占满视口剩余宽度
- 左侧「快速导航」固定显示,滚动时随时切换章节
- 当前章节滚动高亮;修复右侧内容被裁切、边距异常等问题
📁 文件夹项目API
- 批量上传文件到文件夹项目(支持整个
dist/目录部署) - 获取文件夹项目的文件列表(递归,含目录结构)
- 读取文件夹项目中的文件内容(用于部署后验证)
- 发布文件夹项目(
POST /api/folders/{path}/publish,API Key 可用) - 与主站文件夹项目共用 API Key 认证机制
📖 API文档新增
- 新增文件夹项目API对接文档
- 区分单文件API与文件夹API的使用场景和差异
- 提供cURL、Python、Git Hook等多语言示例
🔢 扩展错误码系统
- 从11个基础错误码扩展至200+详细错误码
- 错误码分类体系:认证、参数、配额、文件、业务、服务器
- 每个错误包含详细说明和解决方案
⚡ API速率限制
- 实现分钟、小时、天三级速率限制
- 支持不同用户等级(默认/认证/VIP)
- 响应头包含限流信息(X-RateLimit-*)
📝 文档改进
- 添加速率限制详细说明
- 完善错误码文档
- 添加API版本信息章节
🐛 Bug修复
- 修复文件上传时的编码问题
- 优化错误响应格式
🎉 DKFile API 正式发布
- ✅ 实现文件上传功能
- 🔐 支持API密钥和Session双重认证
- 📊 提供上传配置查询接口
- 📁 智能文件更新机制
- 📖 完整的API文档
代码示例
根据您的使用场景,选择合适的认证方式查看相应的代码示例:
Python 示例
import requests
# 设置API密钥
API_KEY = 'YOUR_API_KEY' # 替换为您的API密钥
BASE_URL = 'https://dkfile.com/dkfile_api'
# 设置请求头
headers = {
'Authorization': f'Bearer {API_KEY}'
}
# 1. 获取上传配置信息(可选)
info_response = requests.get(f'{BASE_URL}/upload/info', headers=headers)
print('配置信息:', info_response.json())
# 2. 上传文件
files = {'file': open('dkfile.html', 'rb')}
data = {
'project_name': '我的项目',
'description': '项目描述'
}
response = requests.post(
f'{BASE_URL}/upload',
headers=headers,
files=files,
data=data
)
result = response.json()
if result['success']:
print(f"✅ 上传成功!")
print(f"文件名: {result['data']['file_name']}")
print(f"访问地址: {result['data']['url']}")
print(f"上传时间: {result['data']['created_at']}")
else:
print(f"❌ 上传失败: {result['message']}")
print(f"错误码: {result.get('error_code', 'N/A')}")
cURL 示例
# 获取上传配置信息 curl -s -X GET https://dkfile.com/dkfile_api/upload/info \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" | python3 -m json.tool # 首次上传文件 curl -s -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]" \ -F "project_name=我的项目" \ -F "description=项目描述" | python3 -m json.tool # 更新同名文件(自动检测并更新) curl -s -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]" \ -F "project_name=我的项目" \ -F "description=更新后的描述" | python3 -m json.tool
cURL 参数说明
-s: 可选,静默模式,不显示进度条和统计信息,让输出更简洁-X POST/GET: 必须,指定 HTTP 方法-H "Header: Value": 必须(用于认证),设置请求头-F "field=value": 必须(上传文件时),发送表单数据(文件上传使用-F "file=@filename")| python3 -m json.tool: 可选,格式化 JSON 输出,让响应更易读。如果系统没有安装 Python 或不需要格式化,可以去掉这部分- 简化示例(不包含可选参数):
curl -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]"
Node.js 示例
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
// 配置
const API_KEY = 'YOUR_API_KEY'; // 替换为您的API密钥
const BASE_URL = 'https://dkfile.com/dkfile_api';
// 设置请求头
const headers = {
'Authorization': `Bearer ${API_KEY}`
};
// 创建表单
const form = new FormData();
form.append('file', fs.createReadStream('dkfile.html'));
form.append('project_name', '我的项目');
form.append('description', '项目描述');
// 上传文件
axios.post(`${BASE_URL}/upload`, form, {
headers: {
...headers,
...form.getHeaders()
}
})
.then(response => {
const result = response.data;
if (result.success) {
if (result.data.is_update) {
console.log('✅ 文件更新成功!');
console.log('文件名:', result.data.file_name);
console.log('访问地址:', result.data.url);
console.log('创建时间:', result.data.created_at);
console.log('更新时间:', result.data.updated_at);
} else {
console.log('✅ 文件上传成功!');
console.log('文件名:', result.data.file_name);
console.log('访问地址:', result.data.url);
console.log('创建时间:', result.data.created_at);
}
} else {
console.error('❌ 操作失败:', result.message);
}
})
.catch(error => {
console.error('请求错误:', error.message);
});
JavaScript (Fetch) 示例
// 配置
const API_KEY = 'YOUR_API_KEY'; // 替换为您的API密钥
const BASE_URL = 'https://dkfile.com/dkfile_api';
// 创建表单数据
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('project_name', '我的项目');
formData.append('description', '项目描述');
// 上传文件
fetch(`${BASE_URL}/upload`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`
},
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('✅ 上传成功!', data.data);
alert(`上传成功!访问地址:${data.data.url}`);
} else {
console.error('❌ 上传失败:', data.message);
alert(`上传失败:${data.message}`);
}
})
.catch(error => {
console.error('请求错误:', error);
alert('请求失败,请检查网络连接');
});
PHP 示例
<?php
// 配置
$apiKey = 'YOUR_API_KEY'; // 替换为您的API密钥
$baseUrl = 'https://dkfile.com/dkfile_api';
// 准备文件
$filePath = 'dkfile.html';
$cfile = new CURLFile($filePath, mime_content_type($filePath), basename($filePath));
// 准备POST数据
$postData = [
'file' => $cfile,
'project_name' => '我的项目',
'description' => '项目描述'
];
// 初始化cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl . '/upload');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiKey
]);
// 执行请求
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 处理响应
$result = json_decode($response, true);
if ($result['success']) {
echo "✅ 上传成功!\n";
echo "文件名: " . $result['data']['file_name'] . "\n";
echo "访问地址: " . $result['data']['url'] . "\n";
echo "上传时间: " . $result['data']['created_at'] . "\n";
} else {
echo "❌ 上传失败: " . $result['message'] . "\n";
}
?>
Python 示例
import requests
# 创建会话(保持Cookie)
session = requests.Session()
# 1. 先登录获取Session
login_url = 'https://dkfile.com/login'
login_data = {
'username': 'your_username',
'password': 'your_password'
}
login_response = session.post(login_url, data=login_data)
if login_response.status_code == 200:
print('✅ 登录成功')
# 2. 获取上传配置(可选)
info_response = session.get('https://dkfile.com/dkfile_api/upload/info')
print('配置信息:', info_response.json())
# 3. 上传文件(Session自动携带Cookie)
upload_url = 'https://dkfile.com/dkfile_api/upload'
files = {'file': open('dkfile.html', 'rb')}
data = {
'project_name': '我的项目',
'description': '项目描述'
}
response = session.post(upload_url, files=files, data=data)
result = response.json()
if result['success']:
print(f"✅ 上传成功!")
print(f"文件名: {result['data']['file_name']}")
print(f"访问地址: {result['data']['url']}")
print(f"上传时间: {result['data']['created_at']}")
else:
print(f"❌ 上传失败: {result['message']}")
else:
print('❌ 登录失败')
cURL 示例
# 1. 先登录并保存Cookie curl -s -X POST https://dkfile.com/login \ -c cookies.txt \ -d "username=your_username" \ -d "password=your_password" # 2. 使用保存的Cookie上传文件 curl -s -X POST https://dkfile.com/dkfile_api/upload \ -b cookies.txt \ -F "[email protected]" \ -F "project_name=我的项目" \ -F "description=项目描述" | python3 -m json.tool # 3. 获取上传配置 curl -s -X GET https://dkfile.com/dkfile_api/upload/info \ -b cookies.txt \ -H "Content-Type: application/json" | python3 -m json.tool
JavaScript (Fetch) - 前端示例
// 注意:用户需要先在浏览器中登录网站
// 登录后浏览器会自动保存Cookie
// 上传文件
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('project_name', '我的项目');
formData.append('description', '项目描述');
fetch('https://dkfile.com/dkfile_api/upload', {
method: 'POST',
credentials: 'include', // 重要:包含Cookie
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('✅ 上传成功!', data.data);
alert(`上传成功!访问地址:${data.data.url}`);
} else {
console.error('❌ 上传失败:', data.message);
alert(`上传失败:${data.message}`);
}
})
.catch(error => {
console.error('请求错误:', error);
alert('请求失败,请检查网络连接或登录状态');
});
jQuery 示例
// 用户需要先登录
// 上传文件
$('#uploadForm').on('submit', function(e) {
e.preventDefault();
var formData = new FormData();
formData.append('file', $('#fileInput')[0].files[0]);
formData.append('project_name', '我的项目');
formData.append('description', '项目描述');
$.ajax({
url: 'https://dkfile.com/dkfile_api/upload',
type: 'POST',
data: formData,
processData: false,
contentType: false,
xhrFields: {
withCredentials: true // 包含Cookie
},
success: function(data) {
if (data.success) {
console.log('✅ 上传成功!', data.data);
alert('上传成功!访问地址:' + data.data.url);
} else {
console.error('❌ 上传失败:', data.message);
alert('上传失败:' + data.message);
}
},
error: function(xhr, status, error) {
console.error('请求错误:', error);
alert('请求失败,请检查网络连接或登录状态');
}
});
});
- Session认证需要先登录,Cookie会在一定时间后过期
- 跨域请求需要设置
credentials: 'include'或withCredentials: true - 不适合后台自动化脚本,推荐使用API密钥认证
最佳实践
- 在上传前调用
/dkfile_api/upload/info检查配额和文件大小限制 - 上传失败时,根据
error_code判断具体错误类型并给出相应提示 - 大文件上传建议添加进度条提示用户
- 建议在上传前验证文件类型,避免上传不支持的文件格式
- 保存返回的
url字段,用于访问和分享文件 - 使用 HTTP 状态码(200/400/401/403/500)判断请求是否成功
created_at返回北京时间(UTC+8),无需手动转换时区
常见问题
以下是用户最常问到的问题,帮助您快速了解DKFile API
DKFile API 是一个完全免费的HTML文件托管和上传API接口。
主要功能包括:
- 🚀 RESTful风格的API接口
- 📁 文件上传和管理
- 🔐 API密钥和Session双重认证
- 📊 完整的API调用日志
- ⚡ 智能文件更新机制
适合开发者、团队、企业快速集成文件托管功能到自己的系统中。
使用DKFile API上传文件非常简单,只需4个步骤:
/dkfile_api/upload 端点file 参数和可选的 project_name、description 参数支持Python、JavaScript、Node.js、PHP等多种编程语言,详见代码示例部分。
DKFile API支持两种认证方式,您可以根据使用场景选择:
API密钥认证(推荐)
适用场景:服务端应用、自动化脚本、CI/CD集成
优势:更安全、支持跨域、适合生产环境
使用方式:在请求头中添加 Authorization: Bearer YOUR_API_KEY
Session认证
适用场景:浏览器环境、已登录用户的Web应用
优势:简单便捷、无需管理密钥、适合快速原型
使用方式:登录后自动携带Session Cookie
详细的认证方式说明和代码示例,请查看认证方式部分。
是的,DKFile 100%完全免费!
🎁 免费内容包括:
- ✅ 功能免费使用 - 所有API功能永久免费开放
- ✅ 文件免费托管 - 上传的文件永久免费存储和发布
- ✅ API免费调用 - 不限制调用次数,随便用
- ✅ 不限制次数 - 每天、每月、每年都没有调用次数限制
💯 零门槛使用:无隐藏费用,无需信用卡,注册即可使用。我们致力于为开发者提供永久免费、稳定、高效的文件托管服务。
DKFile API具有智能文件更新功能:
- ✅ 首次上传:创建新的文件记录,返回
is_update: false - 🔄 重复上传同名文件:自动更新现有文件,返回
is_update: true - 🔗 URL保持不变:文件访问地址始终一致,无需更新引用链接
- 📦 数据保护:保留原有的项目名称、描述等元数据
这意味着您可以放心地多次上传同一个文件名,系统会智能地进行版本更新而不是创建重复文件。
API密钥安全是非常重要的,请遵循以下最佳实践:
.gitignore