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

2uluyalo  于 2023-01-30  发布在  Node.js
关注(0)|答案(1)|浏览(230)

我试着上传文件到ipfs。但是它不能上传到ipfs。上传文件后我得到了哈希值。但是它不能使用**https://ipfs.io/ipfs/+hash访问,但是我可以访问文件localhost:8080/ipfs/+hash**。

我做错了什么?我在https://ipfs.io/ipfs中上载了什么文件

下面是我应用程序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);

我需要帮助。谢谢。

xvw2m8pv

xvw2m8pv1#

正如@deltab所说,您的本地IPFS节点必须可以从网关访问。无法将文件推送到或上载到IPFS网关。当您向网关发出http请求时,它会为您查找IPFS网络上的内容。
您的本地IPFS节点正在托管您添加到它的数据。如果网关的IPFS节点无法连接到您的本地IPFS节点,则它将无法找到您请求的哈希的数据。(除非其他节点也在托管它...共同托管FTW \o/)
如果您的本地IPFS节点正在运行,它可能卡在NAT或防火墙后面。如果您运行ipfs id,您将看到您的节点正在侦听的Addresses数组。如果您看到一个看起来像公用IP地址的数组,则获取IP和端口,并使用https://portchecker.co/之类的联机服务查看端口是否打开
https://docs.ipfs.io在以下方面有很好的文章:

相关问题