如何解决免费图床不可靠的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
chenjia404
V2EX    奇思妙想

如何解决免费图床不可靠的问题

  chenjia404 2024-09-06 15:04:55 +08:00 5690 次点击
这是一个创建于 398 天前的主题,其中的信息可能已经有所发展或是发生改变。

在博客、论坛的各种环境,经常需要图床用于保存和分享图片,但是很多付费和免费的图床都有一个问题,可能比较长时间后(也有可能短时间),图床网站不在了……

一般来讲,每个图床网站同一个图片会生成不同的链接,导致一个图床挂了,就会让所有链接失效,而且只能新上传到一个图床,所有老链接只能手动一个一个修改。

为了解决这个问题,ipfs 图床 使用的了 ipfs 的技术,同一张图片每次上传的文件链接都一样的,然后通过 p2p 技术,一张图片链接可以通过多个网站同时打开。

原理

每个图片上传后,会根据图片文件生成固定的一个哈希,这个哈希规则是通用的。然后通过这个哈希值,可以在全球几百个的网站访问这种图片,如果其中一个网站挂了,更换一下图片链接就马上打开了。

一个图片被多个网站打开后,图片就被复制更多份,让图片的可靠率更高。

使用方法

在线网站

打开ipfs 图床 ,然后上传图片获取图片链接地址。

客户端上传

下载 ipfs-desktop 客户端,在客户端里面上传图片,然后获取图片地址,然后修改图片的域名。

这个方法有一个好处,始终保证你自己掌握一份图片备份,然后通过 p2p 技术,其它网站就可以随时打开这张图片。

如果你追求你的图片 100%可靠性,就需要使用这种方式。

优势

  • 通过这种方式上传的图片,都不会被压缩,也不会被打码,100%原图。
  • 不会因为网站停止运行导致图片丢失。
  • 不会因为审核导致图片丢失。
  • 图片看的人越多,图片被复制到的节点越多,越可靠。

原文: https://ipfsscan.io/post/2024/08/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8A%E4%B8%8D%E5%8F%AF%E9%9D%A0%E7%9A%84%E9%97%AE%E9%A2%98/

62 条回复    2024-09-12 17:25:13 +08:00
lizhenda
    2
lizhenda  
   2024-09-06 16:04:45 +08:00   1
我好奇的是为啥原文网站头部的 logo 图裂了?这对宣传可信度严重打击啊
chenjia404
    3
chenjia404  
OP
   2024-09-06 16:10:14 +08:00
@lizhenda #2 因为没有配置 logo ,想不到配置什么比较合适的。
yb2313
    4
yb2313  
   2024-09-07 09:31:35 +08:00
OWLS
    5
OWLS  
   2024-09-07 14:44:04 +08:00
愿长久。
metalvest
    6
metalvest  
   2024-09-08 13:13:45 +08:00 via Android
@yb2313 这里要发新帖才能加载 imgur 以外的图,回复贴不行
Livid
    7
Livid  
MOD
PRO
   2024-09-10 16:36:01 +08:00   1
@yb2313 我在考虑可能会支持这种 CIDv0?filename= 的新语法。

因为这种方式的一个优雅之处就是,前面的 gateway prefix 是可以随便换的,只需要用正则把后面的 CIDv0?filename= 这部分提取出来。

比如这些地址都可以访问到同一个文件:

https://gateway.ipfsscan.io/ipfs/QmNr8Ffhb7GbtPE2YVsK8MAeULyuKd71W9JMdhnYgxA3qm?filename=CqGDDDoavo.png

https://magic.decentralized-content.com/ipfs/QmNr8Ffhb7GbtPE2YVsK8MAeULyuKd71W9JMdhnYgxA3qm?filename=CqGDDDoavo.png
Livid
    8
Livid  
MOD
PRO
   2024-09-10 16:41:08 +08:00
另外,如果把 CIDv0 转换成 CIDv1 (以上面出现的那个 CIDv0 为例),那么还可以用这个 Limo Gateway:



https://bafybeiahrt6nz6j2ksvf2tbhrv3iv54entu3jzzll2ekgelhxvg45ikmzq.ipfs2.eth.limo/
Livid
  &nbp; 11
Livid  
MOD
PRO
   2024-09-10 16:54:50 +08:00
Livid
    12
Livid  
MOD
PRO
   2024-09-10 17:03:09 +08:00
只要 CID 存在于某个节点上,就肯定可以从某个 gateway 上掏出来。

解决可靠性问题的一个方式就是从前端实现图片加载地址不要强依赖于某个特定的 gateway 。

比如可以用 web component 实现一个 <cidimg src="bafybeiahrt6nz6j2ksvf2tbhrv3iv54entu3jzzll2ekgelhxvg45ikmzq" /> 然后这个 component 到底用哪个 gateway ,可以去读一个外部配置。
Tink
    13
Tink  
PRO
   2024-09-10 17:10:44 +08:00
主要是,能否通过 http 协议访问到,又一定程度上依赖于 gateway ,这个 gateway 是不可控的
Livid
    14
Livid  
MOD
PRO
   2024-09-10 17:12:21 +08:00
@Tink 任何时候,肯定有能用的 gateway 。只要前端能自动帮用户把 gateway 始终换成能用的,图片的可用性对于用户来说就不会有负面感知。
Tink
    15
Tink  
PRO
   2024-09-10 17:16:51 +08:00
@Livid #14 确实,如果能实现前端自动替换可用的 gateway ,那对终端用户是无感的。

估计以后可能会有类似的高可用付费网关吧
Livid
    16
Livid  
MOD
PRO
   2024-09-10 17:18:12 +08:00
@Tink 比如 https://pinnable.xyz/

就是这样的一个 paid-only 的网关。

https://gateway.v2ex.pro/ipns/olivida.eth/
Tink
    17
Tink  
PRO
   2024-09-10 17:19:29 +08:00
@Livid #16 原来已经有了。。牛逼
Livid
    18
Livid  
MOD
PRO
   2024-09-10 17:20:32 +08:00
@Tink 我前段时间写的一篇文章,里面其实也是在思考这件事情:

https://olivida-eth.ipns.gateway.v2ex.pro/hashes/
img2ipfs
    19
img2ipfs  
   2024-09-10 17:32:45 +08:00
@Livid #7 可以直接使用 ipfs://
admol
    20
admol  
   2024-09-10 17:49:24 +08:00
看回复,我还以为是站长在发帖
3L99FY8Topz9608o
    22
3L99FY8Topz9608o  
   2024-09-10 17:56:16 +08:00   1
不好意思,楼上的链接衔接没处理好,重发一遍,支持 ipfs
一直认为 ipfs 是一项很好的技术,这个网站有更多的 pin 服务:
https://ipfs-shipyard.github.io/pinning-service-compliance/
防止以后的人们看不到,所以另附网页存档:
( 1 ) https://archive.ph/gIaKL
( 2 ) https://web.archive.org/web/20240705152256/https://ipfs-shipyard.github.io/pinning-service-compliance/
cnrting
    23
cnrting  
   2024-09-10 18:20:50 +08:00 via iPhone
可 ipfs 真的真的很慢很慢
CSGO
    24
CSGO  
   2024-09-10 18:21:00 +08:00
第一次了解到这个 ipfs ,是不是理解就是你的服务器现做了图床,然后如果正好有人也装了 ipfs 客户端,那么打开这个图,会被缓存,然后在缓存被清空前,且正好在线,那么它也就成为节点?
h404bi
    25
h404bi  
   2024-09-10 18:21:40 +08:00   1
「 100%可靠性」其实是对 ipfs 有些误解,ipfs 存在着与 BitTorrent 同样的 p2p 局限。所谓「 100%可靠性」只对资源生产者而言(除非自己删掉了最后一份备份),在消费端非热门资源的可访问性一直不太行,很多情况下访问一个 cid 就卡在那里了很长一段时间(梦回 BitTorrent 挂着很长时间找寻 peer ),极大消耗耐心。

尤其是个人博客图片,绝大多数都是非常冷门低访问量的资源,这种劣势会被放大。这时候提高可靠性,无非就是让消费端访问固定一个 gateway (背后是生产者自己/代理的 Pinning ,消灭掉寻址过程),这样又回到了自托管/代托管方式。使用 ipfs ,只是多了一个广播到网络上其它 peers 的功能。对于博客图片这样的场景,换来的可能是比用传统图床更差的用户体验(尝试 gateways 的 overhead )。

https://gateway.ipfsscan.io/ipfs/QmNr8Ffhb7GbtPE2YVsK8MAeULyuKd71W9JMdhnYgxA3qm 换成
ipfs://QmNr8Ffhb7GbtPE2YVsK8MAeULyuKd71W9JMdhnYgxA3qm 让 IPFS Companion 去挑 gateway 立马就能体验到这个 overhead

IPFS 很好,但就这个使用场景而言,我觉得 IPFS 是不如传统图床甚至于 Arweave 的。
liudon
    26
liudon  
   2024-09-10 18:25:09 +08:00
还得保证这个文件有被 pin 吧?不然节点的缓存过一段时间就没了
我的 ipfs 站点 https://liudon.eth.limo ,我现在是在 vps 和 filebase 各 pin 了一份数据,保证文件可以访问到
Livid
    27
Livid  
MOD
PRO
   2024-09-10 18:27:49 +08:00
@liudon 如果一个 CID 持续被从不同的 gateway 上访问,其实就是在每个 gateway 的 IPFS repo 里都存了一份。不一定永久,但很多情况下其实够用了。
Livid
    28
Livid  
MOD
PRO
   2024-09-10 18:33:41 +08:00   1
这种一个地方上传,然后可以从无数个其他地方拿到的感觉,真的太好玩了。

比如这是 Planet 的轻量级版本 Croptop ,我把图片拖拽进去,就可以加入到本地的 IPFS repo ,然后这个 CID 又可以从楼主的 gateway 里拿到:



https://gateway.ipfsscan.io/ipfs/QmfLTaFU17G4GqfdcQLk4XJ163wkyejzrnPZkXmB35DVgU
Livid
    29
Livid  
MOD
PRO
   2024-09-10 19:07:14 +08:00
中长期可能会面临的一个问题是如果单个节点的 repo 里的 CID 数量到达 1e5~1e6 之间的时候,IPFS 的 reprovide 可能会出问题。
ochatokori
    30
ochatokori  
   2024-09-10 19:30:57 +08:00 via Android   2
我的博客就是内容只存图片后缀,前端在列表中找可用的前缀
chenjia404
    31
chenjia404  
OP
   2024-09-10 19:34:07 +08:00   1
@Livid #28 我的节点都有几百万的对象以上,我保存了一份维基百科的最新镜像,目前来看没有发现影响性能。
Livid
    32
Livid  
MOD
PRO
   2024-09-10 19:43:40 +08:00
@chenjia404 之前有人基于 IPFS MFS 来做 Linux 包镜像,遇到过一些问题。

https://github.com/ipfs/notes/issues/296#issuecomment-707912467
chenjia404
    33
chenjia404  
OP
   2024-09-10 19:56:37 +08:00   1
@Livid #32 看日期是 2020 年的,最新版应该解决了,这个 cid 里面有几百万个文件 bafybeichypzjch6uuo5pe6btkctcusdwvp77xidgbh5kc2ipowvuaexhiq
qweruiop
    34
qweruiop  
   2024-09-10 20:07:48 +08:00
不知道有啥方法可以保障 1 年之后数据不丢失不。。。
jackkkie
    35
jackkkie  
   2024-09-10 20:08:07 +08:00
所以为啥不部署个 minio ?
crz
    36
crz  
   2024-09-10 20:51:29 +08:00
还是依赖 ipfsscan.io 这个域名吧
chenjia404
    37
chenjia404  
OP
   2024-09-10 20:53:29 +08:00
@crz #36 这个域名也可以随时换,路径是一样的,随时都可以搭建一个新的网站出来,老的图片一样访问。
crz
    38
crz  
   2024-09-10 21:08:46 +08:00
@chenjia404 博客好说,但是博客对图床的依赖相对有限
类似论坛的环境,要一个个帖子编辑过去吗,像是 v2 ,直接编辑不了
chenjia404
    39
chenjia404  
OP
   2024-09-10 21:14:41 +08:00
@crz #38 对,有这个问题,论坛可以解析路径,另外可以用自动跳转的网关,网关不保存图片,但是会自动跳转到最新可用的网关。
我这个域名默认的网关就是跳转网关。
wogogoing
    40
wogogoing  
PRO
   2024-09-10 21:20:17 +08:00 via iPhone
路过的来瞅瞅我的呗:
t/1071339#reply23
cue
    41
cue  
   2024-09-10 22:26:26 +08:00
自建 lsky pro + cloudflare R2
kitty7030
    42
kitty7030  
   2024-09-10 23:43:37 +08:00
怎么没人说网速的问题
图片无法审核的话 就不会有国内网关了吧
mayli
    43
mayli  
   2024-09-11 00:33:37 +08:00
@h404bi 的确,简单说就是图片这个规模,用 ipfs 这种缺乏明确 sla 的方案,并没有明显优势。
当然如果规模大或者需要特殊架构也许更有用。
mayli
    44
mayli  
   2024-09-11 00:41:51 +08:00
@chenjia404 随机出错的体验不大好 ("Gateway time-out Error code 504")

而且 CF 也下线了他的 gateway: https://blog.cloudflare.com/cloudflares-public-ipfs-gateways-and-supporting-interplanetary-shipyard
这个页面上有个图就加载不出来 https://gateway.ipfsscan.io/ipfs/bafybeichypzjch6uuo5pe6btkctcusdwvp77xidgbh5kc2ipowvuaexhiq/wiki/
https://gateway.ipfsscan.io/ipfs/bafybeichypzjch6uuo5pe6btkctcusdwvp77xidgbh5kc2ipowvuaexhiq/I/W-circle.svg.png.webp

而且好多链接都是半天打不开,然后超时之后报错。
mayli
    45
mayli  
   2024-09-11 00:47:37 +08:00
如果只是图床,之前 telegra.ph 就很稳定
第三方自建的也很稳定比如 catbox.moe
chenjia404
    46
chenjia404  
OP
   2024-09-11 09:05:54 +08:00
@mayli #44 这个网关遇到了一些问题,现在修复了
xuanwu
    47
xuanwu  
   2024-09-11 09:28:56 +08:00
以后应该有越来越多代码动态生成图片的工具,如 https://github.com/zengm-games/facesjs
zoharSoul
    48
zoharSoul  
   2024-09-11 10:31:40 +08:00
支持 api 上传吗
mayli
    49
mayli  
   2024-09-11 10:36:28 +08:00
@chenjia404 但是随便点一个链接等半天的体验有点差
chenjia404
    50
chenjia404  
OP
   2024-09-11 10:46:09 +08:00
@mayli #49 维基这个有点特殊,里面几百万个对象,加上这个网关随机每次从 300 个节点里面选取一个,你换一个,一般图片来讲就好很多。
这个网关的速度就快很多 https://ipfs.blockframe.io/ipfs/bafybeichypzjch6uuo5pe6btkctcusdwvp77xidgbh5kc2ipowvuaexhiq/wiki/
nicoljiang
    51
nicoljiang  
PRO
   2024-09-11 12:40:53 +08:00
如果直接回答,那肯定是“你预备足够的钱,养你自己的图床”。
qweruiop
    52
qweruiop  
   2024-09-11 13:06:39 +08:00
不知道,是否可以自己实现
1 ,通过某个 api 或者某种方法查看自己某个资源的存活时间。
2 ,在快过期之前,调用某个 pin service 保活。。。
img2ipfs
    53
img2ipfs  
   2024-09-11 14:00:55 +08:00
@qweruiop #52 只能请求确认资源存在,如果本地有一份,过期后就重新上传一次。
gochendong
    54
gochendong  
   2024-09-11 14:03:57 +08:00
qweruiop
    55
qweruiop  
   2024-09-11 21:06:12 +08:00
@img2ipfs 老哥请教下,我看网上很多地方说只能存 1 年,但是,貌似,也不能真正的确认某个对象的生命周期还剩多少天。。。那如果,自己写个业务,每天都去刷,这样,资源还会被清理吗?
img2ipfs
    56
img2ipfs  
   2024-09-12 12:52:32 +08:00
@qweruiop #55 如果被调用,就相当于更新一次,例如是贴图的场景就很适合。你可以调用多个网关,让他们都帮你保存。
img2ipfs
    57
img2ipfs  
   2024-09-12 13:38:37 +08:00
@zoharSoul #48 网站里面提供了 api
iqoo
    58
iqoo  
   2024-09-12 15:23:16 +08:00
充分利用图床

网站图片很耗流量,不少人将图片上传到图床、相册等第三方站点,充当免费 CDN 。但这也存在诸多难以预测的情况,例如图片被删、限制外链、添加水印、有损压缩、限速等等。

这导致很多人认为免费图床不可靠。事实上,不可靠的不是质量,而是数量!你把所有图片都放在单个图床上,这显然有很大的风险。但如果有多个图床,它们同时出现故障的可能性就呈指数级下降了。

因此,你可以像上述公共库那样,将图片也进行冗余处理,每个图片准备多个 URL ,从而实现一个高度稳定的分布式图床。
...
https://github.com/EtherDream/freecdn/blob/master/docs/feature/README.md#%E5%85%85%E5%88%86%E5%88%A9%E7%94%A8%E5%9B%BE%E5%BA%8A
img2ipfs
    59
img2ipfs  
   2024-09-12 15:33:31 +08:00
@iqoo #58 ipfs 图床就是相当于将图片冗余处理,现在有几十个公共 ipfs 网关,他们的文件路径都一样,只是域名不一样。
iqoo
    60
iqoo  
   2024-09-12 16:27:40 +08:00
@img2ipfs 几年前也尝试用 ipfs + service worker 做一个分布式网站。不过 gateway 基本都活不过几天,被墙的太快了
img2ipfs
    61
img2ipfs  
   2024-09-12 17:06:27 +08:00
@iqoo #60 现在很多 gateway 都至少一年以上了。
iqoo
    62
iqoo  
   2024-09-12 17:25:13 +08:00
@img2ipfs 只要没人举报一般可以活很久。就怕一些无聊人故意传些反动图片然后恶意举报,然后就没了。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1190 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 31ms UTC 17:18 PVG 01:18 LAX 10:18 JFK 13:18
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86