使用ipfs-http-client创建文件/文件夹时如何获取CID
获取IPFS MFS目录与文件的CID
问题原因
ipfs.files.mkdir 和 ipfs.files.write 这两个MFS(可变文件系统)操作默认不会返回CID——前者仅完成目录创建,后者仅完成文件写入,都不会主动返回路径对应的CID数据,所以你看到返回值为空是正常行为。要获取CID,需要主动调用 ipfs.files.stat 方法查询对应路径的元数据。
解决方案代码示例
1. 创建目录后立即获取目录CID
// 创建目录(parents: true 自动创建不存在的父目录) await ipfs.files.mkdir('/foldername', { parents: true }); // 查询目录元数据获取CID const dirStat = await ipfs.files.stat('/foldername'); console.log('目录CID:', dirStat.cid.toString());
2. 写入文件后获取文件与目录CID
fs.readFile(temFilePath, async (err1, data) => { if (err1) throw err1; // 写入文件到MFS目录 await ipfsClient.files.write("/foldername/file.png", data, { create: true }); // 获取文件CID const fileStat = await ipfsClient.files.stat("/foldername/file.png"); const fileCid = fileStat.cid.toString(); // 获取更新后的目录CID(目录内容变化后CID会更新) const dirStat = await ipfsClient.files.stat("/foldername"); const dirCid = dirStat.cid.toString(); console.log('文件CID:', fileCid); console.log('目录CID:', dirCid); res.status(201).send({ message: "file uploaded successfully", fileCid: fileCid, dirCid: dirCid }); });
关键说明
- MFS是可变文件系统,目录的CID会随着目录内文件的添加、删除、修改而变化,所以每次修改目录内容后,都需要重新调用
files.stat获取最新的目录CID。 files.stat返回的对象中,cid是CID实例,调用toString()可以得到字符串格式的CID,方便后续使用。
内容的提问来源于stack exchange,提问作者Mubashir Farooq
相关产品推荐
相关产品推荐

