7 月 20 日就在我写《⭐祝贺丨博客五周年啦!~》的时候,发现 elemecdn 限制访问了,好家伙,才用上不到一个月就又挂了!之前 jsdelivr、gitee 也是这样,抱着侥幸心理去试试果然不行啊…… 思考了很久最终还是选择靠谱的服务器好了_(:з)∠)_

elemecdn的限制报告

elemecdn 的限制报告

想了下,有以下选择:

  • 国内云存储(如七牛云、腾讯云等)
  • Backblaze + Cloudflare
  • OneDrive + OneManager 插件

国内服务器大部分都需要备案的,收费各不同,也有收费低的,但我不太想备案,看各站长的经历就看出来备案过程很麻烦,就还是不考虑国内的服务器了。然后我看到有人说可以用 Backblaze + Cloudflare 的方式,Backblaze 注册后用户有 10G 存储,是永久免费的,即使超过了也收费很低,也可以配合 Cloudflare 做缓存使用,能达到不花钱的目的。官方也有教程,可以按照教程一步步做。但 Cloudflare 需要注册的域名,如果是免费二级域名就只能用 Backblaze 的直链了。
OneDrive + OneManager 上传下载免费,可以达到免费的效果。它的缺点是每个人都会知道你的网盘地址,然后都能上传…… 如果想试的话可以注册个新的账号备用。

Backblaze 特点:

  • 用户永久免费 10GB 直链存储
  • 每天 1GB 下行流量
  • 无限量的上传流量
  • 每天下载请求 2500 次免费
  • 每天上传请求 2500 次免费
  • 基于 CloudFlareCDN

Backblaze 加入了 CloudFlare 的带宽联盟,配合 CloudFlare 超长缓存,每天下载请求无限次免费。

OneDrive + OneManager 特点:

  • 注册给 5G 的永久存储
  • 上传和下载免费
  • 可获取文件直链

缺点是有时候网址末尾需要加上 ?preview 才能预览,待后续解决方案。

Backblaze + Cloudflare 方法

Backblaze

官网:https://www.backblaze.com/b2/cloud-storage.html

官网注册账号,别忘了在 Region 选择地区,注册成功点击 Skip Quick Start - Take Me To My Account 直接进到后台就行,网页底部 Terms & Privacy 可以切换简体中文。去我的设置验证下邮箱 / 手机号。

创建一个桶

创建一个桶

然后点击 My Account 创建一个桶,名称随便写,但最好是 ID + 仓库名,比如 “sarakale-test”,因为是公开的,有可能会撞名。然后档案设置为公共,随便上传一个图片,我们要在后面获取图片链接。

信息填写

信息填写

图片上传后可以点击图片查看详情,可以看到给出了三个链接,我们重点看友好 URLS3URL 就行,这就是图片直链啦~
文件URL

文件 URL

但是我们需要改成自己域名并且缩短域名长度,就需要 Cloudflare 来帮助了!

Cloudflare

官网:https://www.cloudflare.com/zh-cn/

在官网注册下账号,Cloudflare 大家应该都注册过了。Cloudflare 需要已注册的域名,免费的二级域名不适用,在域名商指向刚才的 B2 地址 f003.backblazeb2.com ,cloudflare 也要添加 DNS CNAME 地址。

DNS设置

DNS 设置

现在我们已经添加好了 CNAME,地址会是这样:https://files.sarakale.top/file/sarakale-assets/bg/bg.jpg

可以看出地址很长,我们需要缩短地址长度方便记忆,需要用到 Cloudflare 的转换规则。

重写 URL

在 Cloudflare 左侧菜单点击规则 —— 转换规则,共有 10 条规则可以供我们免费使用。

转换规则

转换规则

点击 “创建转换规则” 下拉表选择 “重写 URL”,一看表单就有点懵,没事,咱们可以在表达式预览右方编辑表达式,这时候可以写自定义条件了。

编辑表达式

编辑表达式

plaintext
not starts_with(http.request.uri.path, "/file/sarakale-assets")

或者在字段选择主机名,运算符选择等于,值填写刚才的地址,如:files.sarakale.top
这么做是为了动态重写 URL,Cloudflare 会把路径进行表达式计算,然后在重写部分下拉表选择 “Dynamic”,写上:

plaintext
concat("/file/sarakale-assets",http.request.uri.path)

重写路径

重写路径

然后就可以部署了,地址会缩短成 https://files.sarakale.top/bg/bg.jpg,测试看看吧。

删除 HTTP 响应标头

浏览器按 F12 键我们发现还有一些不需要的标头,我们需要删除,再回到规则页面,点击 “创建转换规则” 下拉表选择 “修改响应头”,规则名称可以以随意写,比如写 “删除 B2 标头”。
自定义表达式也跟刚才一样,在字段选择主机名,运算符选择等于,值填写刚才的地址,如:files.sarakale.top

然后在修改响应头下拉表选择 “Remove”,写入下面的标头名称:

标头名称
Removex-bz-content-sha1
Removex-bz-file-id
Removex-bz-file-name
Removex-bz-info-src_last_modified_millis
Removex-bz-upload-timestamp
Set dynamicETagconcat(http.response.headers[“x-bz-content-sha1”][0],http.response.headers[“x-bz-info-src_last_modified_millis”][0],http.response.headers[“x-bz-file-id”][0])

设置响应头

设置响应头

最后一条 Set dynamic 是为了提高缓存效率,然后部署下,这时候标头就少很多啦。

设置 CORS

快完成了,最后我们给图像文件设置下 CORS,为了做缓存。

回到规则页面再创建个 “修改响应头”,表达式填写:

plaintext
ends_with(http.request.uri.path, ".png") or
ends_with(http.request.uri.path, ".jpg") or
ends_with(http.request.uri.path, ".gif") or
ends_with(http.request.uri.path, ".jpeg") or
ends_with(http.request.uri.path, ".webp")

响应头选择 “Set staric”,标头名称 Access-Control-Allow-Origin--include--head,值为 *

图像CORS

图像 CORS

由于 Backblaze 默认不缓存,回到 Backblaze,要在桶设定的桶信息填入:

plaintext
{"cache-control":"max-age=43200000"}

缓存

缓存

CORS 规则选 “与所有 HTTPS 来源共享此存储桶中的所有内容”,更新一下即可。

CORS规则

CORS 规则

结束!可以愉快上传图片了。

用命令行工具同步本地文件夹

Backblaze 网页版上传没有批量创建文件夹的按钮,我们可以去下载官方命令行工具:链接
根据你的系统下载即可,我选择的 windows 版本。
官方命令行文档:https://b2-command-line-tool.readthedocs.io/en/master/

首先要获取账户授权,登录 B2,在账户 —— 应用程序键 —— 应用密钥即可看到密钥了。

plaintext
b2-windows.exe authorize-account 4ab123456789 001aabbccddeeff123456789012345678901234567

然后同步文件夹:

plaintext
b2-windows.exe sync "C:/blogimg" "b2://assets/blog"

更多命令行使用方法详见官方文档。

OneDrive + OneManager 方法

OneManager 可以部署到 Vercel、Replit、Heroku、Glitch、VPS 等,这里只展示 Vercel 的部署过程。
要注意的是 Vercel 要等待 30-50 秒左右才会部署成功,每天限制部署 100 次。
还有个项目 onedrive-vercel-index 也是差不多,这个项目更美观点,喜欢哪个就用哪个~

OneManager

OneManager github 页面下载 zip 包,然后到部署页面上传 zip 文件,点击第三步创建令牌,会跳转到 vercel 令牌页面,可以创建新的令牌,名称和日期都随意,然后复制到之前的部署页面,第四步项目名称也可以随意填写,最后点击 Deploy 部署成功!
等待 30-50s 左右就会出现新的地址,点击链接就可以安装了!后面建议再创建新的 Token 导入,后面可以设定管理员密码,记好你的密码不要忘记,就可以愉快使用啦!

信息填写

信息填写

之后可以在设置里添加 OneDrive 了,具体设置就不再赘述了,上传图片后就会生成直链了。

Picgo/ShareX

第三方图片上传工具可以添加 key 或 S3 协议方便上传,具体看 github 的设置。

picgo + Amazon S3 插件:https://github.com/wayjam/picgo-plugin-s3
OneManager + picgo 插件:https://github.com/laoxinH/picgo-plugin-onemanager

参考文章

1、白嫖!10GB 免流海外 BackBlaze 对象存储【可套 CDN】
2、3.25 日 Gitee 图床突然失效了,用什么图床替代它?
3、Free Image Hosting With Cloudflare Transform Rules and Backblaze B2