GitHunt
BA

ban-shao/ai-image-proxy-cloudflare

🚀 使用 Cloudflare Workers + R2 搭建 AI 图像代理,解决 base64 图片堆栈溢出问题 | AI Image Proxy built with Cloudflare Workers + R2

AI Image Proxy - Cloudflare

🚀 使用 Cloudflare Workers + R2 搭建 AI 图像生成服务的中转代理,解决客户端 base64 图片过大导致的堆栈溢出问题

English | 简体中文

📖 项目背景

在使用 AI 图像生成服务(如 Vercel AI Gateway + Gemini 3 Pro Image)时,生成的高分辨率图片(2K/4K)会以 base64 编码形式返回。当图片较大时,base64 文本会非常长,导致某些客户端(如 Cherry Studio)出现堆栈溢出错误,无法正常解析和显示图片。

💡 解决方案

本项目通过 Cloudflare Workers 作为中转代理:

  1. 接收客户端请求并转发到 AI Gateway
  2. 获取 AI Gateway 返回的 base64 图片
  3. 将 base64 图片解码并上传到 Cloudflare R2 对象存储
  4. 将 base64 替换为可访问的图片 URL(Markdown 格式)
  5. 返回优化后的响应给客户端

🏗️ 架构图

┌─────────────────┐
│  Cherry Studio  │
│  (客户端)        │
└────────┬────────┘
         │ API 请求
         ▼
┌─────────────────────────────────────┐
│   Cloudflare Worker (中转代理)       │
│  ┌─────────────────────────────┐    │
│  │ 1. 接收请求                  │    │
│  │ 2. 转发到 Vercel AI Gateway │    │
│  │ 3. 获取 base64 图片          │    │
│  │ 4. 上传到 R2                │    │
│  │ 5. 替换为 URL               │    │
│  └─────────────────────────────┘    │
└──────────┬──────────────────┬───────┘
           │                  │
           │                  ▼
           │         ┌──────────────────┐
           │         │  Cloudflare R2   │
           │         │  (对象存储)       │
           │         │  存储图片文件     │
           │         └──────────────────┘
           ▼
┌─────────────────────────┐
│  Vercel AI Gateway      │
│  (Gemini 3 Pro Image)   │
└─────────────────────────┘

✨ 特性

  • 零成本部署 - Cloudflare Workers 免费额度足够个人使用
  • 全球加速 - Cloudflare CDN 全球节点,访问速度快
  • 自动处理 - 自动提取 base64 图片并转换为 URL
  • 无需服务器 - Serverless 架构,无需维护服务器
  • OpenAI 兼容 - 支持所有使用 OpenAI API 格式的客户端
  • 自定义域名 - 支持绑定自定义域名访问图片

🚀 快速开始

前置要求

部署步骤(纯网页端操作)

1. 创建 R2 存储桶

  1. 登录 Cloudflare Dashboard
  2. 左侧菜单 → R2 对象存储创建存储桶
  3. 名称填写 ai-images
  4. 点击 创建存储桶
  5. 进入存储桶 → 设置公开访问允许访问
  6. 记下公开 URL(格式:https://pub-xxxxxxxx.r2.dev

2. 创建 Worker

  1. 左侧菜单 → Workers 和 Pages创建
  2. 选择 创建 Worker
  3. 名称填写 ai-image-proxy
  4. 点击 部署
  5. 点击 编辑代码,删除默认代码
  6. 粘贴 worker.js 中的代码
  7. 点击 部署

3. 配置 Worker

返回 Worker 页面,点击 设置 标签:

绑定 R2 存储桶:

  • 绑定添加R2 存储桶
  • 变量名称:R2_BUCKET
  • R2 存储桶:选择 ai-images
  • 保存

添加环境变量:

  • 点击 变量和机密添加
  • R2_PUBLIC_URL(文本):https://pub-xxxxxxxx.r2.dev
  • AI_GATEWAY_KEY(加密):你的 Vercel AI Gateway API Key

保存后点击 部署

4. 客户端配置

以 Cherry Studio 为例:

设置项
API Base URL https://ai-image-proxy.你的用户名.workers.dev
API 格式 OpenAI 兼容
API Key 任意字符串(如 sk-1234
模型 google/gemini-3-pro-image

5. 测试

发送测试消息:

生成一张 4K 分辨率的赛博朋克风格城市夜景

如果一切正常,你会看到返回的消息中包含 Markdown 格式的图片链接,客户端能正常显示图片!

📁 项目结构

ai-image-proxy-cloudflare/
├── README.md              # 项目说明(中文)
├── README_EN.md           # 项目说明(英文)
├── worker.js              # Cloudflare Worker 主代码
├── wrangler.toml.example  # Wrangler 配置示例(本地部署用)
├── docs/                  # 详细文档
│   ├── deployment.md      # 部署指南
│   ├── troubleshooting.md # 故障排查
│   └── architecture.md    # 架构设计
└── LICENSE                # 开源协议

🔧 高级配置

使用自定义域名

  1. 在 R2 存储桶设置中绑定自定义域名
  2. 更新 Worker 环境变量 R2_PUBLIC_URL 为你的域名
  3. 重新部署 Worker

本地开发

如果你想在本地开发和测试:

# 安装 Wrangler CLI
npm install -g wrangler

# 登录 Cloudflare
wrangler login

# 复制配置文件
cp wrangler.toml.example wrangler.toml

# 编辑配置文件,填写你的信息

# 本地开发
wrangler dev

# 部署
wrangler deploy

🌟 为什么选择 Cloudflare?

特性 Cloudflare R2 AWS S3 阿里云 OSS
出口流量费 🎉 免费 💰 $0.09/GB 💰 按量付费
存储费用 $0.015/GB/月 $0.023/GB/月 类似
免费额度 10GB + 1000万次读取/月 有限 有限
全球 CDN ✅ 自带 需配合 CloudFront 需配合 CDN

📝 支持的 AI 模型

理论上支持所有通过 Vercel AI Gateway 提供的模型:

  • ✅ Google Gemini 3 Pro Image
  • ✅ Google Imagen 4.0
  • ✅ OpenAI DALL-E 3
  • ✅ 其他返回 base64 图片的模型

🐛 故障排查

查看 故障排查文档 获取常见问题的解决方案。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 开源协议

本项目采用 MIT License 开源。

🙏 致谢

⭐ Star History

如果这个项目对你有帮助,欢迎点个 Star!


Made with ❤️ by the community