使用 R2+Cloudflare Page 部署免费的图床 #1
shenweiyan
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
作为一个程序员,一般写文章都是使用 markdown 编写,可以快速复制到其他平台上。然而 markdown 有一个严重的问题,就是图片保存的问题。
刚开始我使用的 typora 作为编辑器,图片保存在 md 文件同目录的 assets 文件夹。一直以来都是自己阅读,后来有了在线阅读的需求,就自己编写了一个 markdown 阅读工具,完全根据自己的习惯编写。
后来做了博客,面临复制到博客的需求,每次编辑完,再复制图片到博客的文件夹,整个流程就繁琐了。故想一统 markdown 的图片存储。
现在的策略是使用 picgo 上传到 R2 上,然而这个工具有一个严重的问题,多客户端同步的问题。使用一段时间就不再使用了。
一直在想,能不能做一个网页版的图床,使用网页上传,最好不做元数据存储,直接读取 R2 的目录。
调研
程序员,就要自己找轮子,GitHub 上搜搜一番,找到一个还不错的工具 https://github.com/roimdev/roim-picx
已经实现了这些功能,对我来说足够了。
部署上去试了试,整体对我来说很适合。其文档写的也不是很完善,就简单记录一下。
部署
该项目使用了 Cloudflare 的三个能力
Page 中使用了 functions 作为后端服务。
准备工作
创建 KV 存储
登录 Cloudflare 账号,
首页
→Workers 和 Pages
→KV
。创建一个命名空间。
创建 R2 存储
进入
首页
→R2
。创建存储桶,位置可自动。
Fork 仓库
略
部署
可按照教程部署
配置
因为其使用了 KV 和 R2 存储,则需要在
Workers 和 Pages/xxxx
→设置
→函数
中配置这两个变量。KV 空间命名绑定,变量名称
XK
,KV 空间选刚才创建的 KV 命名空间。R2 存储桶绑定,变量名称
R2
,R2 存储通选刚刚创建的。还需要配置一个环境变量,需要在
Workers 和 Pages/xxxx
→设置
→环境变量
中配置。BASE_URL
,值空着不填即可。Token 配置
如果你 Fork 的是本仓库的代码,这一步骤的配置可以忽略。
在 roimdev/roim-picx 的原始项目中其 token 是从 KV 存储中读取的,所以如果你 Fork 的是 roimdev/roim-picx 的代码则需要进入 KV 存储,然后添加条目:
PICX_AUTH_TOKEN
,值可以自定义然后,重新部署。
打开后,输入
PICX_AUTH_TOKEN
定义的值即可登录。魔改
作为一个开源项目,肯定不会 100% 适合我,根据我的需求,做了一点点的改动。
年/月/文件
;调整文件上传路径
原来的文件上传后,会传到根路径中,作为临时图床可以,如果作为静态图片存储,就不合适了,图片多了没办法处理。
文件名称生成在
functions/rest/utils.ts
。修改
getFileName
为getFilePath
,并做以下改动:修改调用方:
全局搜索
getFileName
,替换成getFilePath
。部署后,测试上传是否有问题。
增加复制地址
想法如下:原有的图片地址不变的情况下,图片属性增加一个 copyUrl 的属性,在列表,上传后返回该属性,域名配置使用环境变量。
环境变更
functions/rest/[[path]].ts
图片对象
API 返回
functions/rest/routes/index.ts
列表页面
src/views/ManageImages.vue
src\components\ImageBox.vue
上传页面
src/components/ImageItem.vue
将
htmlLink
,markdownLink
,LINK
这三个地方的url
改成copyUrl
。Token 使用环境变量存储
环境变量在
functions/rest/[[path]].ts
。调用方修改
functions/rest/routes/index.ts
。新增环境变量:
AUTH_TOKEN
。环境变量修改完成后,记得重新部署!
修改网站标题
网站首页在
src/App.vue
。直接修改部署即可。
其他
魔改后的代码地址:https://github.com/liangliangle/roim-picx
Beta Was this translation helpful? Give feedback.
All reactions