Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

wangweiX/cloudflare-r2-uploader

Repository files navigation

Cloudflare R2 图片上传插件

Release Downloads License

一个功能强大的 Obsidian 插件,自动将笔记中的本地图片上传到 Cloudflare R2 存储,支持批量上传、自动粘贴上传等功能。

English | 简体中文

✨ 核心特性

  • 🚀 两种上传方式 - 支持 Worker 代理和 R2 S3 API 直连
  • 📤 批量上传 - 一键上传当前笔记或所有笔记中的图片
  • 📋 自动粘贴上传 - 粘贴图片时自动上传并替换链接
  • 🔄 智能去重 - 自动记录已上传文件,避免重复上传
  • 并发控制 - 支持 1-50 个文件同时上传
  • 🔁 自动重试 - 网络错误时智能重试,确保上传成功
  • 📊 实时进度 - 上传状态窗口,实时显示进度
  • 🗑️ 自动清理 - 可选择上传成功后删除本地文件

🚀 快速开始

1. 安装插件

从 Obsidian 社区插件安装(推荐)

  1. 打开 Obsidian 设置
  2. 进入「第三方插件」→「浏览」
  3. 搜索「Cloudflare R2 Uploader」
  4. 点击安装并启用

手动安装

  1. 下载最新 Release
  2. 解压到 .obsidian/plugins/cloudflare-r2-uploader
  3. 在设置中启用插件

2. 选择上传方式

本插件支持两种上传方式,您可以根据需求选择:

方式 优点 缺点 适用场景
Worker 代理 无需暴露密钥
支持自定义逻辑
更安全
需要部署 Worker
有请求限制
安全性要求高
需要自定义处理
R2 S3 API 直连 配置简单
性能更好
无中间层
密钥存储在本地
可能遇到 CORS 错误
个人使用
追求简单高效

3. 开始使用

配置完成后,您可以:

  • 点击左侧边栏的上传图标 📤
  • 使用命令面板(Cmd/Ctrl + P)执行上传命令
  • 启用自动粘贴上传功能

📖 详细配置指南

方式一:Cloudflare Worker(传统方式)

适合需要更高安全性和自定义功能的用户。

步骤 1:部署 Worker

  1. 准备工作

    • 拥有 Cloudflare 账户
    • 创建 R2 存储桶
    • 安装 Node.js 16+
  2. 部署 Worker

    # 克隆 Worker 仓库
    git clone https://github.com/wangweiX/cloudflare-r2-worker
    cd cloudflare-r2-worker
    npm install
    # 配置 wrangler.toml
    # 修改 bucket_name 为您的存储桶名称
    # 部署
    npm run deploy
  3. 设置环境变量

    • 在 Cloudflare Dashboard 中设置 API_KEY(至少 32 位)

步骤 2:配置插件

在 Obsidian 设置中:

  1. 存储提供者选择「Cloudflare Worker」
  2. 填写 Worker URL
  3. 填写 API Key
  4. 填写存储桶名称

方式二:R2 S3 API 直连(新方式)

适合追求简单配置和高性能的用户。

步骤 1:创建 R2 API 令牌

  1. 登录 Cloudflare 控制台
  2. 进入 R2 → 管理 R2 API 令牌
  3. 创建新令牌,权限选择「对象读和写」
  4. 保存 Access Key ID 和 Secret Access Key

步骤 2:配置插件

在 Obsidian 设置中:

  1. 存储提供者选择「R2 S3 API (直连)」
  2. 填写账户 ID(控制台右侧可见)
  3. 填写 Access Key ID 和 Secret Access Key
  4. 填写存储桶名称

步骤 3:配置 CORS(可选)

如果遇到 CORS 错误,可以在 R2 存储桶设置中添加 CORS 规则:

[
 {
 "AllowedOrigins": ["app://obsidian.md", "*"],
 "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
 "AllowedHeaders": ["*"],
 "ExposeHeaders": ["ETag"],
 "MaxAgeSeconds": 3600
 }
]

注意:CORS 错误通常不影响上传,插件会自动重试。

📚 使用指南

基本操作

上传当前笔记的图片

  • 点击侧边栏上传图标 📤
  • 或使用命令:「上传当前笔记中的图片」

批量上传所有图片

  • 使用命令:「上传所有笔记中的图片」
  • 适合首次迁移或批量处理

自动粘贴上传

  1. 启用「自动粘贴上传」选项
  2. 复制或截图
  3. 粘贴到笔记中即可自动上传

高级功能

并发控制

  • 最大并发上传数:1-50(默认 3)
  • 根据网速调整:慢速网络 1-3,高速网络 10-50

重试机制

  • 最大重试次数:0-5(默认 3)
  • 重试延迟:采用指数退避策略
  • 支持超时设置

上传管理

  • 实时进度显示
  • 支持取消上传
  • 失败任务可重试
  • 上传历史记录

❓ 常见问题

CORS 错误

问题:控制台显示 CORS policy 错误
解决:这是正常现象,插件会自动重试。可选择配置 CORS 规则或忽略。

上传失败

检查清单:

  • 配置信息是否正确
  • 网络连接是否正常
  • API 权限是否足够
  • 存储桶是否存在

图片未更新

可能原因:

  • 图片格式不被支持(仅支持 ![alt](path)![[path]])
  • 图片路径包含特殊字符
  • 笔记未保存

性能优化

  • 上传前压缩大图片
  • 合理设置并发数
  • 使用 WebP 等高效格式

🔧 开发指南

环境准备

# 克隆仓库
git clone https://github.com/wangweiX/obsidian-cloudflare-r2-uploader
cd obsidian-cloudflare-r2-uploader
# 安装依赖
npm install

开发命令

# 开发模式(自动重载)
npm run dev
# 构建生产版本
npm run build
# 打包插件
npm run package

项目结构

src/
├── core/ # 核心插件逻辑
├── models/ # 数据模型
├── services/ # 业务服务
│ ├── worker-service.ts # Worker 方式实现
│ ├── r2-s3-service.ts # S3 API 方式实现
│ └── upload-manager.ts # 上传管理器
├── ui/ # 用户界面
└── utils/ # 工具函数

调试方法

  1. 开启「显示详细日志」选项
  2. 打开开发者工具(Cmd/Ctrl + Shift + I)
  3. 查看 Console 中的日志

🤝 贡献指南

欢迎贡献代码、报告问题或提出建议!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 开启 Pull Request

📝 更新日志

v1.1.0

  • ✨ 新增 R2 S3 API 直连方式
  • 🚀 改进上传管理器,支持并发控制
  • 📊 新增上传状态窗口
  • 🔁 优化重试机制
  • 🐛 修复多个已知问题

查看完整更新日志

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

💖 支持项目

如果这个插件对您有帮助:


Made with ❤️ by wangwei

About

cloudflare r2存储上传工具

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /