在IPFS上托管图片
20221001补充:web3.storage已经把Free Plan上限降到5GB了,不再推荐使用.
可以试着通过TransferKit继续,不过它只有网页版.
之前一直在用 Picgo+GitHub 的方式托管图片,但是感觉不太好(其实就是想折腾),于是找了一下其他自建图床的办法.
原理
IPFS的原理与BT类似,本质上都是P2P连接.
但是IPFS可以通过各类公开网关直接访问其中的文件,格式为:
[IPFS Gateway]/ipfs/[CID v0]
[CID v1].ipfs.[IPFS Gateway]
而每一个文件夹/文件都对应有一个CID,这意味着,每次更改其中内容后其CID都会发生变化.
于是我们可以用IPNS解决这个问题.
可以理解为IPFS中的DNS,专门用于返回最新的CID.
IPFS部分
虽然理论上可以直接在本地运行IPFS节点,从而上传文件到IPFS网络中.
但是在实际使用时会有两个问题:
- 国内网络不友好.
- 若本地取消分享且其他节点没有备份,可能会在下一次自动删除中被清理掉,从而无法访问.
对于这两个问题,我们可以使用第三方托管平台解决.
这里我们使用 web3.storage(以下简称w3s) 提供的服务.
提供类似上传服务的网站还有很多,可以自行搜索.
w3s Token
首先登录进w3s网站.
这里选择邮箱登录即可,当然,也可以使用临时邮箱来获取多个Token
每个Token带有1TB容量,一般人一个就足够了吧qwq
然后前往 Token 界面,输入Token名称以生成.
这里将Token复制好,下一步需要用到.
w3s Cli
通过网站上传文件无疑是很麻烦的,所以我们选择使用Cli工具,在Terminal中操作
需要提前安装好 Node.js.
执行 npm install -g @web3-storage/w3
安装w3s Cli.
随后在Terminal中执行 w3 token
,输出结果应该类似于:
PS C:\Users\username> w3 token
√ Paste your API token for api.web3.storage · [YourToken]
⁂ API token saved
此时你已登入w3s Cli, 输入 w3 -h
即可得到使用说明.
以下是部分命令:
w3 put /path/to/your/file -n [自定义文件名]
#上传文件
w3 list
#查看已上传文件及其CID
w3 name create
#创建IPNS
w3 name publish [IPNS ID] /ipfs/[CID]
#将某个文件/文件夹添加到某个IPNS中
实际使用
假设你新建了一个名为Img的文件夹,并且添加了名为TEST1.jpg的文件,只需要执行:
w3 put ./Img
#将输出的CID记为α
w3 name create
#将输出的IPNS ID记为β
w3 name publish β /ipfs/α
#将Img文件夹对应到该IPNS ID
此时,你便可以通过 β.ipns.[IPFS Gateway]/Img/TEST1.jpg 访问到该图片.
若你想增添TEST2.jpg、TEST3.jpg……
只需要重复第一步与第三步即可.
绑定域名 [可选]
虽然这个时候已经能用了,但是IPNS ID那么长,看起来就不舒服 (bushi)
所以我们可以借助 DNSlink 功能,从我们自己的域名访问IPFS服务.
首先我们要选定一个网关(可以在附录寻找),并且设置好CNAME接入.
- 假设你在使用 a.example.com
然后新建一个TXT Record,名为[_dnslink.a],值为[dnslink=/ipns/β]
不知道β是什么?去看上文w (话说应该不会有人忘得这么快吧)
到这里就已经完成咯
你现在可以通过 a.example.com/Img/[FileName] 来访问图片.
附录
在大陆无法访问
上传完文件后,可以试着先通过w3s网关访问一次,让更多的服务器缓存到你的文件.