如何使用nodejs将文件上传到IPFS

问题描述

我尝试将文件上传到ipfs。但这不是在ipfs中上传上传文件后,我得到的是哈希值。但是使用 https://ipfs.io/ipfs/+hash 无法访问它,但是我可以访问文件 localhost:8080/ipfs/+hash
我在做什么错?我如何在https://ipfs.io/ipfs上传文件
这是我的app.js:

const express = require("express");
const app = express();
const ipfsClient = require("ipfs-http-client");
const ipfs = new ipfsClient();
const expFileUpload = require("express-fileupload");
app.use(expFileUpload());

app.post("/upload",(req,res) => {
    let fileObj = {};
    if (req.files.inputFile) {
        const file = req.files.inputFile;
        const fileName = file.name;
        const filePath = __dirname + "/files/" + fileName;

        file.mv(filePath,async (err) => {
            if (err) {
                console.log("Error: Failed to download file.");
                return res.status(500).send(err);
            }

            const filehash = await addFile(fileName,filePath);
            console.log("File Hash received __>",filehash);
            fs.unlink(filePath,(err) => {
                if (err) {
                    console.log("Error: Unable to delete file. ",err);
                }
            });
            fileObj = {
                file: file,name: fileName,path: filePath,hash: filehash
            };
            res.render("transfer",{ fileObj });
        });
    }
});


const addFile = async (fileName,filePath) => {
    const file = fs.readFileSync(filePath);
    const filesAdded = await ipfs.add({ path: fileName,content: file },{
    progress: (len) => console.log("Uploading file..." + len)
  });
    console.log(filesAdded);
    const filehash = filesAdded.cid.string;

    return filehash;
};

app.listen(3000);

需要帮助。谢谢。

解决方法

正如@deltab所说,本地IPFS节点必须可以从网关访问。 无法将文件推送或上传到IPFS网关。当您向网关发出http请求时,它会为您查找IPFS网络上的内容。

您的本地IPFS节点正在托管您添加到它的数据。如果网关的IPFS节点无法连接到本地IPFS节点,则它将无法找到您请求的哈希的数据。 (除非其他节点也托管它...共同托管FTW \ o /)

如果本地IPFS节点正在运行,则它可能会卡在NAT或防火墙后面。如果运行ipfs id,则会看到节点正在监听的Addresses数组。如果您看到一个看起来像公共IP地址的地址,请抓住IP和端口,并使用https://portchecker.co/

这样的在线服务查看端口是否打开

https://docs.ipfs.io在以下方面有不错的文章:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...