You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js DApp上传文件至本地IPFS时出现404错误求助

问题诊断与修复方案

核心错误:端口混淆

你把IPFS的网关端口和API端口搞混了:

  • 8081是IPFS网关端口,仅用于通过HTTP访问已上传的IPFS内容(比如你用http://127.0.0.1:8081/ipfs/hash访问文件)
  • IPFS节点的API接口默认运行在5001端口,这才是调用ipfs.add()时需要连接的端口

修正后的代码

另外,你的代码同时混用了await和回调函数,会导致逻辑混乱,建议统一使用async/await风格:

document.getElementById('upload_form').addEventListener('submit', async function(event) {
    event.preventDefault();

    // 连接到IPFS API端口5001
    const ipfs = create({host: "127.0.0.1", port: 5001, protocol: "http"});

    try {
        const res = await ipfs.add("Hello world!");
        console.log(res);
    } catch (error) {
        console.error("上传失败:", error);
    }
});

额外配置:解决跨域问题

因为你的DApp运行在8080端口,IPFS API在5001端口,浏览器会触发跨域限制,需要给IPFS节点配置CORS规则:

  1. 执行以下命令修改IPFS配置:
ipfs config --set API.HTTPHeaders.Access-Control-Allow-Origin '["http://localhost:8080"]'
ipfs config --set API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
ipfs config --set API.HTTPHeaders.Access-Control-Allow-Credentials 'true'
  1. 重启IPFS节点:
ipfs daemon --restart

为什么终端命令能正常工作?

终端执行ipfs add时,默认使用本地的UNIX套接字(Linux/macOS)或者127.0.0.1:5001端口,不需要通过网关端口,所以能正常上传。

内容的提问来源于stack exchange,提问作者P00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:55:36