如何从 url 加载图像,然后将其添加到 IPFS?

时间:2021-06-02 18:29:14

标签: node.js image buffer web3 ipfs

我想从 https://example.com/picture1.png 之类的网址加载图片。

那么,我想弄清楚:

  • 图像的宽度(我可以)
  • 图像的高度(我可以)
  • 图像的 keccak256 哈希值(我可以)
  • 图像的 IPFS CID(我不能)

我正在尝试使用 ipfs-mini

我的代码:

const axios = require("axios");
const Web3 = require("web3");
const IPFS = require('ipfs-mini');
const sizeOf = require('image-size');

const web3 = new Web3();
const ipfs = new IPFS({ host: 'ipfs.infura.io', port: 5001, protocol: 'https' });

const loadAndHashImage = async (_url) => {
    const response = await axios.get(_url,  { responseType: 'arraybuffer' });
    const buffer = Buffer.from(response.data, "utf-8");

    const dimensions = sizeOf(buffer);
    console.log("Image Width:", dimensions.width)
    console.log("Image Height:", dimensions.height)

    const imageIpfsCid = await ipfs.add(buffer);
    console.log("Image IPFS CID:", imageIpfsCid); // is different for some reason

    const imageHash = web3.utils.keccak256(buffer);
    console.log("Image Hash:", imageHash);

    const urlIpfsCid = _url.substring(21)
    console.log("NEEDS TO BE TRUE:", imageIpfsCid === urlIpfsCid)
}

loadAndHashImage("https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8");

(现在,我正在传递一个 IPFS url,因为它允许我事先知道我应该在 imageIpfsCid 变量中获得什么 IPFS CID。)

目前,imageIpfsCid 与 CID 中传递的原始值不同,这意味着有问题。

如果我转到 imageIpfsCid,我的计算机会自动开始下载文件,而不是查看图像,这让我怀疑我实际上并未将图像添加到 IPFS,而是数据。

但是,我似乎不知道如何解决这个问题。

一旦修复,传入的 CID 和 imageIpfsCid 应该是匹配的。

0 个答案:

没有答案