IPFS使用求助:文件上传TypeError与Daemon启动TCP错误排查
问题1:IPFS Daemon 启动时的 TCP 保活错误
错误信息:
2022-11-05T01:21:38.715+0100 ERROR tcp-tpt tcp/tcp.go:59 failed set keepalive period {"error": "set tcp4 192.168.1.6:4001->34.211.25.159:41218: setsockopt: invalid argument"}
解决方式:
- 临时修复:启动 daemon 时禁用 TCP 保活,执行命令:
ipfs daemon --tcp-keepalive=false - 永久修复:修改 IPFS 配置文件,步骤如下:
- 执行
ipfs config edit打开配置文件 - 在
Swarm节点下添加或修改"TCPKeepAlive": false - 保存配置后重启 daemon
- 执行
问题2:ipfs.add 上传文件时的 TypeError: source is not async iterable
报错代码:
import * as IPFS from 'ipfs-core' const setURI = async (file, callback) => { try { const ipfs = await IPFS.create() const { cid } = await ipfs.add(file) console.info(cid) // callback(url) } catch (error) { console.error('Error uploading file: ', error) } } export { setURI }
解决方式:
ipfs.add要求传入的参数必须是AsyncIterable类型(比如浏览器的File对象、Node.js 的fs.ReadStream),如果传入的file是普通对象、字符串等不符合要求的类型,就会触发该错误。- 根据运行环境调整代码:
- 浏览器环境:确保传入的是
<input type="file">获取到的File对象,修改后的代码示例:const setURI = async (file, callback) => { try { const ipfs = await IPFS.create() const { cid } = await ipfs.add(file) console.info(cid.toString()) callback(`ipfs://${cid.toString()}`) } catch (error) { console.error('Error uploading file: ', error) } } - Node.js 环境:如果是本地文件,使用
ipfs.addFromPath或读取文件流后传入,示例:import * as IPFS from 'ipfs-core' import fs from 'fs' const setURI = async (filePath, callback) => { try { const ipfs = await IPFS.create() const { cid } = await ipfs.addFromPath(filePath) console.info(cid.toString()) callback(`ipfs://${cid.toString()}`) } catch (error) { console.error('Error uploading file: ', error) } }
- 浏览器环境:确保传入的是
内容的提问来源于stack exchange,提问作者user9958772
相关产品推荐
相关产品推荐

