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规则:
- 执行以下命令修改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'
- 重启IPFS节点:
ipfs daemon --restart
为什么终端命令能正常工作?
终端执行ipfs add时,默认使用本地的UNIX套接字(Linux/macOS)或者127.0.0.1:5001端口,不需要通过网关端口,所以能正常上传。
内容的提问来源于stack exchange,提问作者P00
相关产品推荐
相关产品推荐

