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

问题描述 投票:0回答:1

我想从某些网址加载图像,例如

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
应该匹配。

node.js image buffer web3js ipfs
1个回答
0
投票

你可以参考这个链接它有完整的IPFS与nodejs的实现

© www.soinside.com 2019 - 2024. All rights reserved.