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

如何用ipfs-http-client生成带.glb后缀的IPFS链接?

解决IPFS上传单个GLB文件生成带后缀链接的问题

核心解决方案

当使用wrapWithDirectory: true时,必须显式指定带后缀的文件名,并从上传结果中提取根目录CID,再拼接文件名得到完整的带后缀IPFS链接。

具体代码实现

const { create } = require('ipfs-http-client');
const fs = require('fs');

async function uploadGLBFile() {
  // 初始化IPFS客户端,替换为你的节点地址
  const ipfs = create({ url: 'http://localhost:5001/api/v0' });

  // 读取本地GLB文件
  const glbFilePath = './your-3d-model.glb';
  const fileContent = fs.readFileSync(glbFilePath);

  // 上传文件,指定带后缀的文件名并开启目录包装
  const uploadResults = await ipfs.add(
    {
      path: 'nft-model.glb', // 这里设置带.glb后缀的文件名
      content: fileContent
    },
    { wrapWithDirectory: true }
  );

  // 从结果中筛选出根目录的CID(path为空字符串的条目)
  const rootDirCid = uploadResults.find(item => item.path === '').cid.toString();
  // 拼接得到带后缀的IPFS链接
  const validIpfsUrl = `ipfs://${rootDirCid}/nft-model.glb`;

  console.log('可被OpenSea识别的GLB文件链接:', validIpfsUrl);
}

// 执行上传
uploadGLBFile().catch(error => console.error('上传失败:', error));

关键细节说明

  • 为什么之前result.path为空?
    开启wrapWithDirectory: true后,ipfs.add会返回一个数组,包含两个条目:一个是文件本身(path为你指定的文件名),另一个是根目录(path为空字符串)。你需要遍历数组找到根目录的CID,而不是直接取单个结果的path。
  • 文件名的重要性:
    必须在上传时指定带.glb后缀的文件名,这样IPFS目录中会保留这个后缀,拼接后的链接才能被OpenSea识别为3D模型文件。
  • 验证链接:
    生成链接后,可通过IPFS网关(如https://ipfs.io/ipfs/${rootDirCid}/nft-model.glb)测试访问,确认文件能正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:30:43