#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 имеет хорошие статьи по:
- IPFS и NATS https://docs.ipfs.io/how-to/nat-configuration /
- Шлюзы IPFS:https://docs.ipfs.io/concepts/ipfs-gateway /