2025-05-27 13:38:09 +08:00
2025-05-23 11:06:07 +08:00
2025-05-27 13:38:09 +08:00
2025-05-23 11:06:07 +08:00
2025-05-23 11:06:07 +08:00

Cloudflare Worker 图片上传服务

这是一个基于 Cloudflare Worker 的图片上传服务,可以接收 base64 编码的图片,将其上传到 Cloudflare R2 存储桶中,并返回可访问的图片链接,在用量不大时是完全免费的!

功能特点

  • 接收 JSON 格式的 base64 编码图片
  • 支持多种图片格式JPEG、PNG、GIF、WebP 等)
  • 自动生成唯一文件名
  • 返回可直接访问的图片链接
  • 支持苹果快捷指令等客户端工具

部署指南

前提条件

  1. 拥有 Cloudflare 账户
  2. 已创建 Cloudflare R2 存储桶github和bing上教程太多了这里就不一一说明了
  3. 安装 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 等),如果未提供则默认为 jpeg
    • imageData: base64 编码的图片数据(不包含 data:image/xxx;base64, 前缀)
  • 响应:

    {
      "success": true,
      "url": "https://your-bucket-public-url/timestamp-randomstring.jpeg",
      "message": "图片上传成功"
    }
    

在苹果快捷指令中使用

  1. 创建新的快捷指令
  2. 添加"选取照片"操作
  3. 添加"编码媒体"操作,设置编码格式为"Base64"
  4. 最好添加一个调整图片大小的操作,以减少图片大小。
  5. 添加"获取网页内容"操作:
    • URL: 您的 Worker URL
    • 方法: POST
    • 请求头部: Content-Type: application/json
    • 请求正文: JSON 格式,包含以下字段:
      {
        "imageType": "jpeg",
        "imageData": "{{输入}}"
      }
      
  6. 添加"获取词典中的值"操作,提取响应中的 URL
  7. 添加"显示结果"或"复制到剪贴板"操作

在其他客户端中使用

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'])

注意事项

  1. 对于大图片,建议在客户端进行压缩后再上传,以避免超出 Cloudflare Worker 的处理限制
  2. 确保您的 R2 存储桶已正确配置公共访问权限
  3. 为了增强安全性,您可能需要添加身份验证机制
  4. 如果 base64 字符串包含换行符(如苹果设备生成的),服务会自动清理,但是最好不要有此类内容

贡献

欢迎通过 Issues 和 Pull Requests 提供反馈和改进建议。

联系方式

如有问题,请通过 GitHub Issues 联系我们。

Description
No description provided
Readme AGPL-3.0 84 KiB
Languages
JavaScript 100%