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 作为中转代理:
- 接收客户端请求并转发到 AI Gateway
- 获取 AI Gateway 返回的 base64 图片
- 将 base64 图片解码并上传到 Cloudflare R2 对象存储
- 将 base64 替换为可访问的图片 URL(Markdown 格式)
- 返回优化后的响应给客户端
🏗️ 架构图
┌─────────────────┐
│ 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 格式的客户端
- ✅ 自定义域名 - 支持绑定自定义域名访问图片
🚀 快速开始
前置要求
- Cloudflare 账号(免费)
- Vercel AI Gateway API Key
部署步骤(纯网页端操作)
1. 创建 R2 存储桶
- 登录 Cloudflare Dashboard
- 左侧菜单 → R2 对象存储 → 创建存储桶
- 名称填写
ai-images - 点击 创建存储桶
- 进入存储桶 → 设置 → 公开访问 → 允许访问
- 记下公开 URL(格式:
https://pub-xxxxxxxx.r2.dev)
2. 创建 Worker
- 左侧菜单 → Workers 和 Pages → 创建
- 选择 创建 Worker
- 名称填写
ai-image-proxy - 点击 部署
- 点击 编辑代码,删除默认代码
- 粘贴
worker.js中的代码 - 点击 部署
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 # 开源协议
🔧 高级配置
使用自定义域名
- 在 R2 存储桶设置中绑定自定义域名
- 更新 Worker 环境变量
R2_PUBLIC_URL为你的域名 - 重新部署 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
On this page
Languages
JavaScript100.0%
Contributors
Latest Release
v1.0.0November 30, 2025MIT License
Created November 30, 2025
Updated January 6, 2026