如何使用nodejs上传文件到IPFS
how to upload files to IPFS using nodejs
我尝试将文件上传到 ipfs。但它没有在 ipfs 中上传。上传文件后,我在 return 中得到哈希值。但是使用 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 节点,那么它将无法找到您请求的哈希数据。 (除非其他节点也托管它...co-hosting FTW \o/)
如果您的本地 IPFS 节点是 运行ning,它可能会卡在 NAT 或防火墙后面。如果你 运行 ipfs id
,你会看到一个 Addresses
的数组,你的节点正在侦听。如果您看到一个看起来像 public IP 地址的地址,请获取 IP 和端口并使用 https://portchecker.co/
等在线服务查看端口是否打开
https://docs.ipfs.io 有关于以下内容的好文章:
我尝试将文件上传到 ipfs。但它没有在 ipfs 中上传。上传文件后,我在 return 中得到哈希值。但是使用 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 节点,那么它将无法找到您请求的哈希数据。 (除非其他节点也托管它...co-hosting FTW \o/)
如果您的本地 IPFS 节点是 运行ning,它可能会卡在 NAT 或防火墙后面。如果你 运行 ipfs id
,你会看到一个 Addresses
的数组,你的节点正在侦听。如果您看到一个看起来像 public IP 地址的地址,请获取 IP 和端口并使用 https://portchecker.co/
https://docs.ipfs.io 有关于以下内容的好文章: