最近看到不少博客的图片挂掉了,各博主也用各种方法替换掉了图片。如果从开始使用外链的时候就可以让外链可以按照图片的状况自动进行替换,是不是就没有这些麻烦了。
于是就有了下面的想法:
按照这样的话,如果图片挂掉了,我们只需要从根节点将图片取出来,根据 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。希望能考上一个自己心仪的学校。
最后是项目地址,欢迎安装使用:
![]() | 1 2010 2019-05-04 13:58:35 +08:00 演示可有? |
![]() | 3 BTR 2019-05-04 14:29:58 +08:00 via iPhone 战略 Star,感谢分享 |
![]() | 4 lunatic5 2019-05-04 14:51:32 +08:00 看起来不错啊,已 Star |
![]() | 5 div class="sep3"> aimerforreimu OP |
![]() | 6 Tink PRO 权重是自己配置还是怎么个情况? |
![]() | 7 aimerforreimu OP @Tink 现在是默认用我配置的,后期会允许用户自己配置,如果想要改权重的话也是可以的,不过需要自己改代码,在 server/index.go 中可以修改 https://image.prntscr.com/image/VLxqtBSEQh_Cl24851m4tw.png |
![]() | 8 aimerforreimu OP |
![]() | 9 Tink PRO @aimerforreimu #7 我没太明白这个过程。比如现在阿里 oss 权重最高,然后阿里 oss 挂了,我是需要修改一下权重就自动切换到另外一个图床了,还是说需要做什么操作? 但是你这边说修改权重需要改代码,我就不太懂了 |
![]() | 10 aimerforreimu OP @Tink 是这样的: 我现在有 A,B,C,D 个可以储存的图床,我给他按照权重进行排名,排名结果是:B,A,D,C 首次上传我会上传到根节点(根节点可以选择:github,gitee,本地),并且会异步上传到 B 图床,因为 B 的权重排名是最高的。同时系统会自动检测图片在 B 图床的状态,如果检测到 B 图床上面的图片有了防盗链或者失效了,系统会从根节点中取出这张图片,上传到 A 图床,一次类推,直到回源为止 |
11 hakono 2019-05-04 17:13:29 +08:00 @aimerforreimu 顶楼和项目似乎楼主都没有把一点说清楚…… 这个图床的是上传图片的时候,会将图片按照权重列表,上传到所有支持的图床获取获取一堆图片链接,然后按照权重重定向。如果高权重的图片挂了,就自动切换到下一个权重的图床链接? |
![]() | 12 aimerforreimu OP @hakono 上传一次其实会返回三个链接,分别是: 分发链接: http://你的域名 /dispatch/{hash} 根节点链接: http://xxxxxxxxxxxx 跳转图床链接:xxxxxxx 但是你能看到的只有分发链接,访问这个分发链接,就会自动跳转到当前的图床上面去。根节点链接是用来取出图片,重新上传用的。 |
![]() | 13 aimerforreimu OP @hakono 是的如果图片挂了后台会自动检测并且切换到下个权重高的图床 |
14 hakono 2019-05-04 17:25:17 +08:00 @aimerforreimu 啊,回复了才发现楼主已经回答了。其实我个人建议还是,上传的时候按照权重列表一次性传到所有支持的图床里。然后检测图片有没有挂,自动切换图床 原因主要还在于楼主这个项目的一个很重要的概念:根节点。这东西不是一般人能简单确保而且长期维护的。 首先 github 这类地方不是拿来做个人图片备份,网盘的地方。而且 github 的 repo 体积超过 1G 就会被邮件警告要求你购买文件系统服务。对于一个图床根节点来说,1G 空间非常小。 如果放置在服务器或者 vps 本地的话,本地硬盘空间就是个很要命的问题。毕竟如果自己的 vps 服务器硬盘够大的话,一般都是考虑自己建图床了。 |
![]() | 15 aimerforreimu OP @hakono 如果非常多的话根节点可以考虑使用 Flickr 或者 imgur,Flickr 交完保护费以后是无限空间,imgur 一般不会删图片,并且是免费的。 感谢你的提醒,回头把这两个加到根节点中 |
![]() | 16 agdhole 2019-05-04 17:29:14 +08:00 这个反推 hash 的点子不错 前端 drawer 建议默认展开 "mdui-drawer-open",按按钮展开再切换体验真的很差 |
![]() | 17 aimerforreimu OP @agdhole 收到,感谢反馈 |
![]() | 18 FakeLeung 2019-05-04 17:40:53 +08:00 via Android 战略性 Mark。 再问下,这个是开源的然后自行部署至自己的服务器吗? |
![]() | 19 1etterSong 2019-05-04 18:07:36 +08:00 缺开源程序? 缺的是国内国外分布式服务端 感谢开源 |
20 lzxgh621 2019-05-04 18:41:31 +08:00 via Android 看着好熟悉,前段时间是不是发过一次。 |
![]() | 21 BCy66drFCvk1Ou87 2019-05-04 18:49:58 +08:00 via Android nice |
![]() | 22 AslanFong 2019-05-04 19:22:30 +08:00 支持 |
![]() | 23 hugee 2019-05-04 19:22:47 +08:00 via Android 聚合图床要流失大批付费用户了 23333 |
![]() | 24 mritd 2019-05-04 19:30:29 +08:00 终于看到一个 go 写的了...哈哈哈哈 |
![]() | 25 aimerforreimu OP @mritd 个人很喜欢 go |
![]() | 26 strugglexiang 2019-05-04 21:02:29 +08:00 via Android 战略收藏,以后可能用到 |
![]() | 27 ScotGu 2019-05-04 21:09:34 +08:00 终于等到你。 聚合图床(类似)的思路,开源的代码。 这就去 star |
![]() | 28 imningfeng 2019-05-04 21:36:13 +08:00 小白可以用吗?需要先安装 go 环境? |
![]() | 29 aimerforreimu OP @imningfeng 不需要哟,这个东西就类似于 exe,直接./auxpi 就可以运行了 |
![]() | 30 aimerforreimu OP @ScotGu 感谢~ |
![]() | 31 chroming 2019-05-04 22:42:06 +08:00 学生写代码都比我厉害系列 ![]() |
![]() | 32 miaomiao888 2019-05-05 02:05:36 +08:00 这个类似想法前段时间看到有人发过,但不只是针对图床,而是利用一些的免费空间和图床建立低成本的网站,所谓的网站 CDN 去中心化 https://github.com/EtherDream/decent-cdn |
![]() | 33 chinesestudio 2019-05-05 04:33:27 +08:00 via Android 需要区分 https 和 http 图床 方便调用 |
![]() | 34 chinesestudio 2019-05-05 05:08:38 +08:00 via Android 顺便 可以利用国内外免费网盘授权存储调用图片 基本就完美了。再加一个多用户系统,就可以对外免费提供服务了。 楼主可以参考 duplicati 加密上传到多个网盘 就样源删除图片也解决了。 |
35 orqzsf1 2019-05-05 09:53:29 +08:00 战略性收藏,我是来学 go 的 /滑稽 |
![]() | 36 alexmy 2019-05-05 10:45:05 +08:00 看起来很不错哦,机械能有心来写代码,太少见了,一般都是画图画图再画图。 |
37 python30 2019-05-05 10:50:49 +08:00 支持一下吧 |
![]() | 38 aimerforreimu OP @alexmy 确实天天画图,画的头疼,哈哈 |
39 Panway 2019-05-05 13:11:51 +08:00 想点个 Star,发现已经点过了 |
40 Littmean 2019-05-05 13:13:04 +08:00 好像跟聚合图床差不多( https://www.superbed.cn/),LZ 以后会不会商业化啊? |
![]() | 42 aimerforreimu OP @Littmean 我是个学生,暂时没考虑商业化,这个算我学习 Go 过程中交的一个作业 |
![]() | 43 aimerforreimu OP @Panway 哈哈,感谢 |
![]() | 44 aimerforreimu OP @chinesestudio 好主意,有机会加上 onedrive 和 gdrive 的定时备份,其实一直是多用户的 |
![]() | 45 X-Force 2019-05-05 18:10:13 +08:00 非常棒的项目!其实除了公共图床,变化一下还能有更多的用处,比如对私有搭建的多台 VPS,一旦某台触及流量用完的阈值,就分发到下台 VPS 去。或者根据用户地理位置,分发到不同地区的 VPS …… |
![]() | 46 Acirno 2019-05-05 18:12:07 +08:00 希望能支持截图或者复制图片后直接 CTRL+V 粘贴上传 |
![]() | 47 aimerforreimu OP @Acirno 收到,已经加入 TODO 列表中 |
48 CononYc 2019-05-06 16:39:01 +08:00 支持,已 Star |
![]() | 49 feiandxs 2019-05-06 17:09:24 +08:00 这个根节点的概念其实还是等于我有个主控空间,其他的那些图床可以当 CDN 来处理了。 这个概念挺好的,但本质上,我如果在 A 图床的图片失效了,即便后续在 B 节点更新了,但如果我其他地方有引用这张图的话…… 哦,抱歉我没看上面流程图,其实访问还是从自己这边先预先走的。 |
![]() | 50 aimerforreimu OP @feiandxs 相当于控制反转了,现在控制权在自己手里,如果想要手动改也是可以的,后面会有相应的 crud 操作 |
![]() | 51 feiandxs 2019-05-06 17:42:50 +08:00 |
![]() | 52 aimerforreimu OP @feiandxs 流量大了就贵了,一个月几百的 CDN 费用有时候还是蛮高的,另外后面可以考虑加入 OOS 进行图片回源 |
![]() | 53 feiandxs 2019-05-07 15:41:15 +08:00 @aimerforreimu 其实几百的 CDN 费用也不算贵,而且这个量级对个人来说已经大到可怕了,对公司来说,反而这点钱又不是事。 而且不论个人还是公司,有这个级别流量几百块怎么也收得回来了哈哈哈。 但这个东西对个人确实还是有意义,蚊子肉也是肉,能不花钱就不花钱也是。。 |
![]() | 54 Musir 2019-05-07 20:52:05 +08:00 via Android 这个下载才慢哦 |
![]() | 55 Musir 2019-05-07 22:48:07 +08:00 以安装失败而告退 |
56 uc2664360 2019-06-17 19:48:21 +08:00 我不知道我理解错没,在这个图床上传的图片,拿到一个地址比如 http://abc.com/dispatch/hash 然后每次访问这个资源都会先走图床服务器,然后由服务器进行判断是否防盗链,被墙了就按照权重使用下一个图床 这么做的话,所有的请求都要先到图床服务器拿真实的资源链接,也就是图床服务器必须不能挂。 如果访问量低还好,访问量上去了是不是对图床服务器的并发能力有要求了呀。 |
![]() | 57 aimerforreimu OP 有缓存的,防盗链当然不可能每次都检查呀 |
![]() | 58 chinesestudio 2019-09-07 20:48:42 +08:00 via Android 大佬 还更新不 很多小问题 不更新的话可否付费私人定制 |
![]() | 59 zkdfbb 2019-09-09 11:14:20 +08:00 |
![]() | 60 chinesestudio 2019-09-09 11:53:12 +08:00 via Android @zkdfbb 我是用来给论坛做图床服务 不是用别人的 谢谢啦 这个和 superbed 功能差不多 改改就成 |
![]() | 61 nnuuij1 2019-11-03 22:07:47 +08:00 大佬,能不能做个 picgo 插件呀?你这个跟聚合图床有点像 |