macOS 通过 Cloudflare R2 搭建个人图床网盘服务
免费教程
Open

近期在 X 上有几个热门讨论帖子:

  1. 部署 Cloudflare 图床服务被滥用每月消耗 PB 级流量(链接);
  2. 搭建图床 1图床 2

以上几个「图床」都是基于 Cloudflare Pages/Worker 和 Telegram 提供的 telegra.ph 服务,套壳免费服务实现的。严重滥用可能导致域名拉黑封号。我的账号偶尔偷跑每月流量也有超过 400G,参考国内 CDN 流量 1 元 1 G,若不是免费将会是一笔不小的费用;telegra.ph 也算是一个小而美的产品,整个页面仅有一个发布按钮,无需登录,支持单个最大 5M 图片附件,日常发布一个文稿分享非常便捷,但 telegra.ph 并不是为单独存储图片、大量存储图片准备的,感激互联网有这样简单纯粹产品的存在,实在不应该「不择手段」薅羊毛。我并不会日常使用 telegra.ph,但是哪天如果没有了,可能会惦记伤心。


所以这提供一个正经的 Cloudflare R2 实现个人图床网盘小案例,最简单只需两三行代码( X 上的视频演示)。

Cloudflare R2 提供每月 10GB 存储,百万千万次 A/B 类操作,无需支付任何费用。

难度:⭐️★★★★
耗时:15 分钟
适用平台:macOS / Linux,Windows 需要 WSL 环境

macOS 通过 Cloudflare R2 搭建个人图床网盘服务 R2.png

以上代码保存为 r2.sh,上传当前文件夹下的 xinzhi.png 可以直接在终端运行:

bash r2.sh xinzhi.png 

文件上传后,自动复制分享链接到剪切板,可以直接使用。看起来已经足够简单,对于某些不熟悉终端和命令行环境的朋友可能还是一头雾水。

完整使用这个脚本,需要你的 macOS 已经安装了 Cloudflare 的 Wrangler CLI,注册 Cloudflare 账号并启用 R2 服务并创建一个存储 Bucket。

Wrangler 是 Cloudflare 提供的命令行界面(CLI),用于管理 Worker 项目。

好在 Cloudflare 账号的注册、激活 R2 存储服务都十分简单,这里就略过了。

新手快速完成 Wrangler CLI 环境安装三步走:
1、 安装 Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2、通过 Homebrew 安装 npm;

brew install npm

3、通过 npm 安装 Wrangler

npm install wrangler --save-dev

第一次使用 wrangler,运行 npx wrangler 应该会提示登录,通过浏览器登录绑定 Cloudflare 账号即可。

完成以上步骤,使用 wrangler 上传文件到 R2 就可以顺利跑通了。如果需要将命令行变成可视化操作,可以更新脚本代码,实现几个功能:

  1. 监视文件夹更改;
  2. 上传新文件;
  3. 存档已上传文件,并生成上传结果。

以下是我当前使用的脚本供参考:

#!/bin/bash

upload_file() {
    local file=$1
    if [[ $file != *"DS_Store"* && $file != *"uploaded"* ]]; then
        ext="${file##*.}"
        date=$(date +%s)
        if [ ! -f $file ]; then
            echo "File not found!"
            return
        fi
        touch R2_AutoUpload/Uploading.txt
        output=$(npx wrangler r2 object put workbene/$(date +%Y/%m/%d)/$date.$ext -f $file)
        if [[ $output == *"Upload complete."* ]]; then
            echo "https://images.workbene.com/$(date +%Y/%m/%d)/$date.$ext" > $(dirname $file)/uploaded/$(basename $file)_url.txt
            mv $file $(dirname $file)/uploaded/
            rm  R2_AutoUpload/Uploading.txt
            say -v "Zoe" "R2 Upload complete."
        else
            echo "Upload failed. Retrying..."
        fi
    fi
}

cd ~/
mkdir -p R2_AutoUpload/uploaded

# Upload all files in R2_AutoUpload folder
for file in R2_AutoUpload/*; do
    upload_file $file
done

# Start watching for file changes using fswatch
fswatch -0 R2_AutoUpload/ | while read -d "" event
do
    upload_file $event
done

需要对应更新 workbene 为你的 Bucket 名称和绑定的域名,脚本依赖 fswatch,运行 brew install fswatch 完成安装,不了解代码可以发送给 ChatGPT 进行解读分析。

测试运行脚本:

bash r2sync.sh

测试正常,可以放到后台运行:

nohup bash r2sync.sh

建议将脚本 r2sync.sh 放置在个人文件夹根目录,运行脚本将创建 R2_AutoUpload 文件夹,后续在R2_AutoUpload 文件夹放置文件将自动上传 R2,并移动到uploaded 文件夹存档。存档文件夹中你还可以查看文件对应的分享链接。
history.png

以上就是 Cloudflare R2 网盘的初步实现了,希望对你有用。如果需要帮助,可以在这里或 X 上留言更新

Voters
Powered by FeedbackTrace