как загружать файлы в IPFS с помощью nodejs

#node.js #express #file-upload #httpclient #ipfs

#node.js #экспресс #загрузка файла #httpclient #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);
  

Нужна помощь. Спасибо.

Комментарии:

1. Похоже, вы успешно сохранили его на своем узле, но другие узлы не могут его получить. Проверьте подключение вашего узла: может ли он достичь узлов начальной загрузки?

Ответ №1:

Как сказал @deltab, ваш локальный узел IPFS должен быть доступен из шлюза. Невозможно отправить файлы на шлюз IPFS. Когда вы делаете HTTP-запрос к шлюзу, он просматривает содержимое в сети IPFS для вас.

На вашем локальном узле IPFS хранятся добавленные вами данные. Если узлы IPFS шлюза не могут подключиться к вашему локальному узлу IPFS, то он не сможет найти данные для запрошенного вами хэша. (Если только другие узлы также не размещают его … совместно с FTW o /)

Если ваш локальный узел IPFS запущен, он может застрять за NAT или брандмауэром. Если вы запустите ipfs id , вы увидите массив, который Addresses прослушивает ваш узел. Если вы видите тот, который выглядит как общедоступный IP-адрес, затем возьмите IP и порт и посмотрите, открыт ли порт с помощью онлайн-сервиса, такого какhttps://portchecker.co /

https://docs.ipfs.io имеет хорошие статьи по: