js-ipfs向节点添加文件功能异常,调用add方法未写入指定目录
js-ipfs add方法无法写入指定目录解决方案
问题原因
你调用c.files.mkdir操作的是IPFS的可变文件系统(MFS),而c.add方法默认生成的是独立的IPFS DAG结构,两者默认不互通:
- 你给
c.add传入的/metadata/0.json路径仅用于生成包裹文件的目录结构,返回的最顶层目录CID就是你拿到的QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn,该CID对应的目录下实际包含0.json文件,可通过c.ls(QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn)验证 - 这个生成的目录结构不会自动同步到MFS中,所以你通过
c.files.ls('/metadata')查询不到目标文件
解决方案
方案1:直接使用MFS写入接口(推荐)
无需提前创建目录,直接调用files.write方法写入目标路径即可:
// 写入文件,create参数控制不存在则创建,parents参数控制自动生成父目录 await c.files.write('/metadata/0.json', new TextEncoder().encode(''), { create: true, parents: true }) // 验证写入结果 const fileStat = await c.files.stat('/metadata/0.json') console.log('文件CID:', fileStat.cid.toString())
方案2:add方法生成CID后手动同步到MFS
如果必须使用add方法上传,需要手动把生成的文件CID关联到MFS目录:
// 上传文件 const addRes = await c.add({ path: '0.json', content: '' }) // 把文件拷贝到MFS目标目录 await c.files.cp(`/ipfs/${addRes.cid}`, '/metadata/0.json')
内容的提问来源于stack exchange,提问作者Krishna Satya
相关产品推荐
相关产品推荐

