javascript - IPFS。DAG 从 Web 浏览器获取内容
问题描述
我通过 HTTP 客户端向 IPFS 发送请求:
var cleanScript = {
'type': 'script'
};
var formData = new FormData();
var jsonse = JSON.stringify(cleanScript);
var blob = new Blob([jsonse], {type: "application/json"});
formData.append('file', blob, 'file.json')
fetch('https://ipfs.infura.io:5001/api/v0/add', {
method: 'POST',
body: formData
})
.then(r => r.json())
.then(data => console.log(data))
我可以通过浏览器访问这些东西,例如:
https://ipfs.infura.io/ipfs/QmZp5tQwLkMxpYHHK4a1989xYCjfUG81Po7LoaUwmxpDqP https://gateway.ipfs.io/ipfs/QmZp5tQwLkMxpYHHK4a1989xYCjfUG81Po7LoaUwmxpDqP
链接的形成原理如下:
- 协议- http / https
- 域- ipfs.infura.io / gateway.ipfs.io / localhost:5555
- 路径- ipfs / ipns
- hash - 来自响应的散列
{protocol}://{domain}/{path}/{hash}
但如果我使用 DAG:
var cleanScript = {
"a": 1,
"b": [1, 2, 3],
"c": {
"ca": [5, 6, 7],
"cb": "foo"
}
};
var formData = new FormData();
var jsonse = JSON.stringify(cleanScript);
var blob = new Blob([jsonse], {
type: "application/json"
});
formData.append('file', blob, 'somefile.json')
fetch('https://ipfs.infura.io:5001/api/v0/dag/put', {
method: 'POST',
body: formData
})
.then(r => r.json())
.then(data => console.log(data))
我不明白链接是如何形成的。
我可以通过浏览器访问内容吗?
解决方案
go-ipfs v0.4.22 提供的 HTTP 网关只支持返回文件和目录。这些是unixfsv1格式的 DAG(用 multicodec 标识dag-pb
)。您可以在cid.ipfs.io看到 dag-pb 是您的第一个 CID 的一部分。
您通过创建的自定义 DAG默认/api/v0/dag/put
添加dag-cbor
,您无法通过 HTTP 网关读取它们,因为它们不再是文件或目录。
您应该能够通过 HTTP API 端点在/api/v0/get
. 例如:
https://ipfs.io/api/v0/dag/get?arg=bafyreiah7uhzdxbuik6sexirej22iyi5nau3d4nnfhv6ux33ogtdpeznpm
推荐阅读
- python - 如何使用 Python 将字节更改为十六进制?
- php - wordpress 重写规则的问题
- node.js - 无法从工作区启动配置启动工作区定义的任务 [VS Code]
- javascript - 未捕获的 SyntaxError:对象 + 属性中的意外标记“)”
- javascript - 如何使用包含数组的复杂对象构建查询字符串?
- javascript - 当存储在 useContext 中的对象更新 DOM 时不会重新渲染
- google-cloud-platform - 如何为 GCP 数据流作业构建租户级指标计数器?
- c - 使用浮点数时计算错误
- safari - 在 Safari 和 Webkit 上进行测试有什么区别?
- c# - 从另一个类传递到控制器的变量下载文件