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

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

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

Cloudflare

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

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

DNS设置

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

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

重写URL

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

转换规则

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

编辑表达式

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

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

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,为了做缓存。

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

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

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

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

缓存

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

CORS规则

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

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

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

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

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

然后同步文件夹:

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