DKFile 提供简单易用的文件上传API,支持单文件上传和管理功能
DKFile API 基于 REST 架构设计,使用标准的 HTTP 方法和状态码。所有请求和响应均使用 JSON 格式。
https://dkfile.com/dkfile_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 -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@dkfile.html" \ -F "project_name=我的项目"
# 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));
如果您选择使用API密钥认证,需要先获取API密钥。以下是获取和管理API密钥的详细步骤:
访问API密钥管理页面,创建、查看和管理您的API密钥
确保您已经登录到DKFile账户
点击"创建新密钥"按钮,输入密钥名称和过期时间(可选)
重要:密钥只显示一次,请立即复制并妥善保存
创建新的API密钥,支持自定义名称和过期时间
查看所有API密钥的列表和状态信息
随时启用或禁用API密钥,无需删除
永久删除不再需要的API密钥
| 限制项 | 限制值 | 说明 |
|---|---|---|
| 密钥数量 | 最多10个 | 每个用户最多可创建10个API密钥 |
| 密钥长度 | 64字符 | API密钥为64位随机字符串 |
| 过期时间 | 可选设置 | 可设置1天到1年的过期时间,或永不过期 |
| 权限范围 | 完整权限 | API密钥具有与登录用户相同的权限 |
点击按钮将在新标签页中打开API密钥管理页面
上传单个文件到DKFile平台
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | File | 必填 | 要上传的文件对象 |
| project_name | String | 选填 | 项目名称,默认使用文件名 |
| description | String | 选填 | 文件描述信息 |
DKFile API 支持智能文件管理,当上传同名文件时会自动更新现有文件:
| 字段名 | 类型 | 说明 |
|---|---|---|
| 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:新建) |
{
"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"
}
API权限被禁用 (403)
403 Forbidden{
"success": false,
"message": "您的API调用权限已被禁用,请联系管理员",
"error_code": "API_PERMISSION_DENIED"
}
获取当前用户的上传配置信息和配额
{
"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", ".css", ".js", ...],
"api_version": "1.0"
}
}
为确保服务稳定性和公平性,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-Remainingretry_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 | 服务器错误 | 服务器内部错误、数据库错误、服务不可用 |
| 错误码 | 错误类型 | 说明 | 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 查看当前目录DKFile API遵循语义化版本控制,确保向后兼容性和平滑升级。
发布日期:2025-01-01
更新日期:2025-01-15 (v1.0.1)
POST /dkfile_api/upload)GET /dkfile_api/upload/info)| 策略项 | 说明 |
|---|---|
| 命名规则 | 使用语义化版本号(主版本.次版本.修订版本) |
| 支持周期 | 每个版本至少支持12个月 |
| 弃用通知 | 弃用通知至少提前3个月 |
| 下线通知 | 下线通知至少提前6个月 |
| 向后兼容 | 次版本更新保持向后兼容 |
| 重大变更 | 主版本更新可能包含不兼容变更 |
🔢 扩展错误码系统
⚡ API速率限制
📝 文档改进
🐛 Bug修复
🎉 DKFile API 正式发布
GET /dkfile_api/files)DELETE /dkfile_api/files/{id})PUT /dkfile_api/files/{id})GET /dkfile_api/stats)根据您的使用场景,选择合适的认证方式查看相应的代码示例:
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 -X GET https://dkfile.com/dkfile_api/upload/info \ -H "Authorization: Bearer YOUR_API_KEY" # 首次上传文件 curl -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@dkfile.html" \ -F "project_name=我的项目" \ -F "description=项目描述" # 更新同名文件(自动检测并更新) curl -X POST https://dkfile.com/dkfile_api/upload \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@dkfile.html" \ -F "project_name=我的项目" \ -F "description=更新后的描述"
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);
});
// 配置
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
// 配置
$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";
}
?>
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('❌ 登录失败')
# 1. 先登录并保存Cookie curl -X POST https://dkfile.com/login \ -c cookies.txt \ -d "username=your_username" \ -d "password=your_password" # 2. 使用保存的Cookie上传文件 curl -X POST https://dkfile.com/dkfile_api/upload \ -b cookies.txt \ -F "file=@dkfile.html" \ -F "project_name=我的项目" \ -F "description=项目描述" # 3. 获取上传配置 curl -X GET https://dkfile.com/dkfile_api/upload/info \ -b cookies.txt
// 注意:用户需要先在浏览器中登录网站
// 登录后浏览器会自动保存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('请求失败,请检查网络连接或登录状态');
});
// 用户需要先登录
// 上传文件
$('#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('请求失败,请检查网络连接或登录状态');
}
});
});
credentials: 'include' 或 withCredentials: true/dkfile_api/upload/info 检查配额和文件大小限制error_code 判断具体错误类型并给出相应提示url 字段,用于访问和分享文件created_at 返回北京时间(UTC+8),无需手动转换时区以下是用户最常问到的问题,帮助您快速了解DKFile API
DKFile API 是一个完全免费的HTML文件托管和上传API接口。
主要功能包括:
适合开发者、团队、企业快速集成文件托管功能到自己的系统中。
使用DKFile API上传文件非常简单,只需4个步骤:
/dkfile_api/upload 端点file 参数和可选的 project_name、description 参数支持Python、JavaScript、Node.js、PHP等多种编程语言,详见代码示例部分。
DKFile API支持两种认证方式,您可以根据使用场景选择:
适用场景:服务端应用、自动化脚本、CI/CD集成
优势:更安全、支持跨域、适合生产环境
使用方式:在请求头中添加 Authorization: Bearer YOUR_API_KEY
适用场景:浏览器环境、已登录用户的Web应用
优势:简单便捷、无需管理密钥、适合快速原型
使用方式:登录后自动携带Session Cookie
详细的认证方式说明和代码示例,请查看认证方式部分。
是的,DKFile 100%完全免费!
🎁 免费内容包括:
💯 零门槛使用:无隐藏费用,无需信用卡,注册即可使用。我们致力于为开发者提供永久免费、稳定、高效的文件托管服务。
DKFile API具有智能文件更新功能:
is_update: falseis_update: true这意味着您可以放心地多次上传同一个文件名,系统会智能地进行版本更新而不是创建重复文件。
API密钥安全是非常重要的,请遵循以下最佳实践:
.gitignore