Vercel 部署的 Twikoo 对接自定义 Chevereto V4 图床
环境说明
- 博客框架:Hexo Fluid 主题
- 评论系统:Twikoo 1.6.44(Vercel 部署)
- 图床:MoePic 提供的 Chevereto V4 图床
核心思路
Twikoo 1.6.44 的前端图片上传逻辑完全由后端控制。Twikoo 后端内置支持的图床有限,不支持 Chevereto。
因此方案分两步:
- 在 Vercel 上创建一个代理接口
/api/upload,负责接收前端图片并转发到 Chevereto V4 - 在前端直接 hook Twikoo 的 Vue 组件方法
onSelectImage,拦截图片上传,改为调用自己的代理接口
第一步:创建 Vercel 代理接口
在你的 Twikoo Vercel 项目根目录创建 api/upload.js:


点击展开代码
1 | |
添加依赖
确认 package.json 中包含以下依赖:
1 | |
配置 Vercel 环境变量
在 Vercel → 你的项目 → Settings → Environment Variables 中添加:
| 变量名 | 值 |
|---|---|
CHEVERETO_URL | https://你的图床域名(不带末尾斜杠) |
CHEVERETO_API_KEY | 你的 Chevereto V4 API Key |
⚠️ 注意:不要设置
IMAGE_CDN、IMAGE_CDN_URL、IMAGE_CDN_TOKEN这三个环境变量,否则 Twikoo 会启用内置图床逻辑并报错。
获取 Chevereto V4 API Key
登录 Chevereto 后台 → Dashboard → Settings → API,确认 API 已启用,复制 API V1 Key。
第二步:Hook 前端 Vue 组件
为什么不能用普通 DOM 事件拦截
Twikoo 的上传按钮是 Vue 组件渲染的,使用 on:{change:e.onSelectImage} 绑定事件。即使用 cloneNode 替换元素,Vue 仍会重新绑定事件。必须直接覆盖 Vue 实例上的 onSelectImage 方法。
创建注入脚本
在 Hexo 博客根目录的 scripts/ 文件夹下创建 inject-twikoo.js:
点击展开代码
1 | |
注意:将 https://你的twikoo.vercel.app/api/upload 替换为你的 Vercel 域名。
第三步:部署
这就不用我废话了吧,祝你成功!
我踩的坑
坑1:Chevereto V4 认证方式变了
V3 用表单字段 key 认证,V4 改为 HTTP Header X-API-Key,混用会返回 400。
坑2:base64 传输会损坏
用 URLSearchParams 传 base64 Data URL 时,+ 和 / 字符被 URL 编码破坏,导致 Chevereto 报 Invalid base64 string。应直接用 multipart 传二进制。
坑3:Twikoo 内置图床环境变量干扰
设置了 IMAGE_CDN=lskypro 等变量后,Twikoo 后端会用内置逻辑处理上传,完全绕过自定义代理,且会把 IMAGE_CDN_URL 的值当成 Bearer Token 发出去。。
坑4:cloneNode 无法移除 Vue 事件
Twikoo 使用 Vue 绑定 change 事件,cloneNode 替换元素后 Vue 会重新渲染并重新绑定,必须直接覆盖 Vue 实例的 onSelectImage 方法。