还在为新浪图床限制外链苦恼?试试这个开源图床!

2019-05-04 13:06:24 +08:00
 aimerforreimu

前言

最近看到不少博客的图片挂掉了,各博主也用各种方法替换掉了图片。如果从开始使用外链的时候就可以让外链可以按照图片的状况自动进行替换,是不是就没有这些麻烦了。

于是就有了下面的想法:

按照这样的话,如果图片挂掉了,我们只需要从根节点将图片取出来,根据 hash 值重新上传到一个新的权重较高的图床,然后更新一下跳转链接就解决问题了, 这样链接的控制权就到我们手里了,完成了控制反转(大雾。如果图片一直挂,只能说明一个问题,你的图片有问题(黄色或者暴力)抱歉我不打算为这种图片和这样的上传者进行服务。

图片链接类似于下面的样子,可以点击一下试试

https://test.demo-1s.com/dispatch/b7a36157422a51122998a1b04603eca0

动手

于是就动手写了一个图床,集合了几个常见的图床来做一个跳转,目前大概支持 19 个图床,包括国外的一部分图床。另外支持异地根节点,包括 github,gitee,imgur,同时还支持使用代理链接去代理一些具有防盗链的图片,鉴黄和 OOS 对接正在开发中。

感谢为我提建议的 github 的朋友,想法很不错。

可以看一下目前的样子,另外项目地址是 https://github.com/aimerforreimu/auxpi

支持拖拽对首页的菜单进行排序和开关控制

支持分发图片,返回的链接是 http://你的网站 /dispatch/{hash} 的形式,会自动跳转到权重较高的图床,并且分发是后台异步分发(感谢 Golang 的协程,用起来太爽了)

首页有几个可视化的图标,方便分析(装 x)

另外附上可以站点设置

个人感悟

楼主是一个学机械的大学生,目前大三,准备考软件或者计算机的研究生,这个东西算是对自己学习 Golang 的一个总结吧。前端用的 Vue+Element-ui ,后端用的是 Golang 进行的开发,感谢 vue-element-admin 这个后台框架,真的非常棒。一个人写所有的东西真的很累,但是收获也很多。以后开发的速度可能会比较慢了,因为要复习考研了,有空的话我会改一下 bug。希望能考上一个自己心仪的学校。

最后是项目地址,欢迎安装使用:

Github: https://github.com/aimerforreimu/auxpi

11812 次点击
所在节点    分享创造
61 条回复
2010
2019-05-04 13:58:35 +08:00
演示可有?
2010
2019-05-04 14:01:50 +08:00
@2010 看到了
ksyson
2019-05-04 14:29:58 +08:00
战略 Star,感谢分享
lunatic5
2019-05-04 14:51:32 +08:00
看起来不错啊,已 Star
aimerforreimu
2019-05-04 15:51:51 +08:00
@lunatic5
@ksyson 感谢支持
Tink
2019-05-04 16:08:12 +08:00
权重是自己配置还是怎么个情况?
aimerforreimu
2019-05-04 16:13:55 +08:00
@Tink 现在是默认用我配置的,后期会允许用户自己配置,如果想要改权重的话也是可以的,不过需要自己改代码,在 server/index.go 中可以修改

https://image.prntscr.com/image/VLxqtBSEQh_Cl24851m4tw.png
aimerforreimu
2019-05-04 16:15:01 +08:00
Tink
2019-05-04 16:46:36 +08:00
@aimerforreimu #7 我没太明白这个过程。比如现在阿里 oss 权重最高,然后阿里 oss 挂了,我是需要修改一下权重就自动切换到另外一个图床了,还是说需要做什么操作?

但是你这边说修改权重需要改代码,我就不太懂了
aimerforreimu
2019-05-04 17:08:16 +08:00
@Tink 是这样的:

我现在有 A,B,C,D 个可以储存的图床,我给他按照权重进行排名,排名结果是:B,A,D,C

首次上传我会上传到根节点(根节点可以选择:github,gitee,本地),并且会异步上传到 B 图床,因为 B 的权重排名是最高的。同时系统会自动检测图片在 B 图床的状态,如果检测到 B 图床上面的图片有了防盗链或者失效了,系统会从根节点中取出这张图片,上传到 A 图床,一次类推,直到回源为止
hakono
2019-05-04 17:13:29 +08:00
@aimerforreimu
顶楼和项目似乎楼主都没有把一点说清楚……
这个图床的是上传图片的时候,会将图片按照权重列表,上传到所有支持的图床获取获取一堆图片链接,然后按照权重重定向。如果高权重的图片挂了,就自动切换到下一个权重的图床链接?
aimerforreimu
2019-05-04 17:17:34 +08:00
@hakono 上传一次其实会返回三个链接,分别是:

分发链接: http://你的域名 /dispatch/{hash}

根节点链接: http://xxxxxxxxxxxx

跳转图床链接:xxxxxxx

但是你能看到的只有分发链接,访问这个分发链接,就会自动跳转到当前的图床上面去。根节点链接是用来取出图片,重新上传用的。
aimerforreimu
2019-05-04 17:18:38 +08:00
@hakono 是的如果图片挂了后台会自动检测并且切换到下个权重高的图床
hakono
2019-05-04 17:25:17 +08:00
@aimerforreimu 啊,回复了才发现楼主已经回答了。其实我个人建议还是,上传的时候按照权重列表一次性传到所有支持的图床里。然后检测图片有没有挂,自动切换图床

原因主要还在于楼主这个项目的一个很重要的概念:根节点。这东西不是一般人能简单确保而且长期维护的。
首先 github 这类地方不是拿来做个人图片备份,网盘的地方。而且 github 的 repo 体积超过 1G 就会被邮件警告要求你购买文件系统服务。对于一个图床根节点来说,1G 空间非常小。
如果放置在服务器或者 vps 本地的话,本地硬盘空间就是个很要命的问题。毕竟如果自己的 vps 服务器硬盘够大的话,一般都是考虑自己建图床了。
aimerforreimu
2019-05-04 17:28:43 +08:00
@hakono 如果非常多的话根节点可以考虑使用 Flickr 或者 imgur,Flickr 交完保护费以后是无限空间,imgur 一般不会删图片,并且是免费的。

感谢你的提醒,回头把这两个加到根节点中
agdhole
2019-05-04 17:29:14 +08:00
这个反推 hash 的点子不错
前端 drawer 建议默认展开 "mdui-drawer-open",按按钮展开再切换体验真的很差
aimerforreimu
2019-05-04 17:33:07 +08:00
@agdhole 收到,感谢反馈
FakeLeung
2019-05-04 17:40:53 +08:00
战略性 Mark。
再问下,这个是开源的然后自行部署至自己的服务器吗?
1etterSong
2019-05-04 18:07:36 +08:00
缺开源程序?
缺的是国内国外分布式服务端

感谢开源
lzxgh621
2019-05-04 18:41:31 +08:00
看着好熟悉,前段时间是不是发过一次。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX