批量更新 Cloudflare R2 对象的缓存控制头和其他元数据。
- ✨ 批量处理 - 一次更新成千上万个文件的元数据
- 🎯 灵活筛选 - 按文件类型、路径前缀筛选
- 🔍 预览模式 - 安全的预览修改,不实际改动文件
- ⚡ 并发处理 - 可配置的并发数,优化处理速度
- 📊 详细日志 - 完整的处理结果统计
npm install复制 .env.example 为 .env:
cp .env.example .env编辑 .env 文件并填入你的 R2 凭证:
R2_ACCOUNT_ID=your_cloudflare_account_id
R2_ACCESS_KEY=your_r2_access_key
R2_SECRET_KEY=your_r2_secret_key
R2_BUCKET_NAME=your_bucket_name
R2_ENDPOINT=https://your_account_id.r2.cloudflarestorage.com
# 其他可选配置
DRY_RUN=true # 预览模式(推荐先用 true 预览)
CONCURRENCY=5 # 并发数- 登录 Cloudflare Dashboard
- 进入 R2
- 点击 Manage R2 API Tokens
- 创建新的 API Token(记录访问密钥)
- 找到你的账户 ID(通常在 URL 中看到)
npm start在 .env 中将 DRY_RUN 改为 false,然后运行:
npm startnpm run single编辑 single.js 中的文件key:
updateSingleFile('your-file-name.jpg');| 变量 | 说明 | 示例 |
|---|---|---|
R2_ACCOUNT_ID |
Cloudflare 账户 ID | c8953126a8fbc1bbc4e4a73bab0c89b8 |
R2_ACCESS_KEY |
R2 访问密钥 | 从 Dashboard 获取 |
R2_SECRET_KEY |
R2 密钥 | 从 Dashboard 获取 |
R2_BUCKET_NAME |
桶名称 | blog |
R2_ENDPOINT |
R2 端点 | https://[account].r2.cloudflarestorage.com |
DRY_RUN |
预览模式 | true / false |
CONCURRENCY |
并发处理数 | 5 |
FILE_TYPES |
要处理的文件类型 | .jpg,.png,.gif |
PREFIX |
路径前缀(可选) | images/ |
CACHE_CONTROL_* |
不同文件类型的缓存策略 | 见下表 |
| 变量 | 默认值 | 说明 |
|---|---|---|
CACHE_CONTROL_IMAGES |
public, max-age=86400, immutable |
图片(1天) |
CACHE_CONTROL_CSS |
public, max-age=3600 |
CSS 文件(1小时) |
CACHE_CONTROL_JS |
public, max-age=3600 |
JavaScript(1小时) |
CACHE_CONTROL_FONTS |
public, max-age=86400, immutable |
字体(1天) |
CACHE_CONTROL_DEFAULT |
public, max-age=3600 |
其他文件(1小时) |
.env:
DRY_RUN=true
FILE_TYPES=.jpg,.jpeg,.png,.gif,.webp
PREFIX=.env:
DRY_RUN=true
FILE_TYPES=.js,.css,.woff2
PREFIX=assets/.env:
CACHE_CONTROL_IMAGES=public, max-age=31536000, immutable
CACHE_CONTROL_CSS=public, max-age=86400
CACHE_CONTROL_JS=public, max-age=3600max-age=86400- 缓存 1 天max-age=3600- 缓存 1 小时max-age=31536000- 缓存 1 年immutable- 资源永不变化(适合带版本号的文件)public- 所有缓存都可存储(包括代理)
A: 预览模式(DRY_RUN=true)只显示会做什么修改,不实际修改文件。建议先用预览模式检查配置是否正确。
A: 设置 PREFIX 环境变量,例如 PREFIX=images/。
A: 检查以下几点:
- R2 凭证是否正确
- 桶名称是否正确
- 网络连接是否正常
- API Token 是否有足够权限
A: 立即生效,但 CDN 节点缓存可能需要 5-10 分钟同步。
A: 使用 curl 查看响应头中的缓存信息:
curl -I "https://your-cdn-domain/image.jpg"- 不要将
.env文件提交到版本控制 .gitignore已包含.env规则- 保管好你的访问密钥,不要泄露给他人
- 定期轮换 API Token
- 使用 AWS SDK v3 与 R2 通信(兼容 S3 API)
- 通过 CopyObject 命令更新元数据(原文件内容不变)
- 支持 HTTP/1.1 并发请求
- 自动跳过已配置正确的文件
MIT
- ✨ 首次发布
- 支持批量更新缓存控制头
- 支持预览模式和实际修改模式
- 灵活的文件筛选选项