mirror of
https://github.com/ElmGates/Cloudflare-img2url.git
synced 2026-01-11 20:45:47 +08:00
main
Cloudflare Worker 图片上传服务
这是一个基于 Cloudflare Worker 的图片上传服务,可以接收 base64 编码的图片,将其上传到 Cloudflare R2 存储桶中,并返回可访问的图片链接,在用量不大时是完全免费的!
功能特点
- 接收 JSON 格式的 base64 编码图片
- 支持多种图片格式(JPEG、PNG、GIF、WebP 等)
- 自动生成唯一文件名
- 返回可直接访问的图片链接
- 支持苹果快捷指令等客户端工具
部署指南
前提条件
- 拥有 Cloudflare 账户
- 已创建 Cloudflare R2 存储桶(github和bing上教程太多了,这里就不一一说明了)
- 安装 Wrangler CLI 工具
安装 Wrangler CLI
npm install -g wrangler
登录到 Cloudflare 账户
wrangler login
配置 wrangler.toml
修改项目根目录下的 wrangler.toml 文件:
name = "image-uploader"
main = "index.js"
compatibility_date = "2025-01-01"
# 配置 R2 存储桶
[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "your-bucket-name" # 替换为您的 R2 存储桶名称
# 环境变量
[vars]
PUBLIC_URL = "https://your-bucket-public-url" # 替换为您的 R2 存储桶公共访问 URL
请确保将 bucket_name 替换为您实际创建的 R2 存储桶名称,并将 PUBLIC_URL 替换为您的 R2 存储桶公共访问 URL。
部署 Worker
wrangler deploy
使用方法
API 接口
-
URL: 您的 Worker URL(部署后获得)
-
方法: POST
-
请求头:
Content-Type: application/json -
请求体:
{ "imageType": "jpeg", "imageData": "base64编码的图片数据" }或者使用嵌套格式:
{ "img": { "imageType": "jpeg", "imageData": "base64编码的图片数据" } } -
参数说明:
imageType: 图片类型(如 jpeg, png, gif 等),如果未提供则默认为 jpegimageData: base64 编码的图片数据(不包含data:image/xxx;base64,前缀)
-
响应:
{ "success": true, "url": "https://your-bucket-public-url/timestamp-randomstring.jpeg", "message": "图片上传成功" }
在苹果快捷指令中使用
- 创建新的快捷指令
- 添加"选取照片"操作
- 添加"编码媒体"操作,设置编码格式为"Base64"
- 最好添加一个调整图片大小的操作,以减少图片大小。
- 添加"获取网页内容"操作:
- URL: 您的 Worker URL
- 方法: POST
- 请求头部: Content-Type: application/json
- 请求正文: JSON 格式,包含以下字段:
{ "imageType": "jpeg", "imageData": "{{输入}}" }
- 添加"获取词典中的值"操作,提取响应中的 URL
- 添加"显示结果"或"复制到剪贴板"操作
在其他客户端中使用
cURL
curl -X POST https://your-worker-url.workers.dev \
-H "Content-Type: application/json" \
-d '{"imageType":"jpeg","imageData":"base64编码的图片数据"}'
JavaScript
const imageData = 'base64编码的图片数据';
fetch('https://your-worker-url.workers.dev', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
imageType: 'jpeg',
imageData: imageData
})
})
.then(response => response.json())
.then(data => console.log(data.url))
.catch(error => console.error('Error:', error));
Python
import requests
import json
image_data = 'base64编码的图片数据'
response = requests.post(
'https://your-worker-url.workers.dev',
headers={'Content-Type': 'application/json'},
data=json.dumps({
'imageType': 'jpeg',
'imageData': image_data
})
)
print(response.json()['url'])
注意事项
- 对于大图片,建议在客户端进行压缩后再上传,以避免超出 Cloudflare Worker 的处理限制
- 确保您的 R2 存储桶已正确配置公共访问权限
- 为了增强安全性,您可能需要添加身份验证机制
- 如果 base64 字符串包含换行符(如苹果设备生成的),服务会自动清理,但是最好不要有此类内容
贡献
欢迎通过 Issues 和 Pull Requests 提供反馈和改进建议。
联系方式
如有问题,请通过 GitHub Issues 联系我们。
Languages
JavaScript
100%