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

如何在IPFS的JSON中存储并取回Blob?(Node.js+Pinata)

在Node.js中通过Pinata将Blob存入IPFS并还原为Blob对象

核心问题:JSON无法直接序列化Blob对象。当你调用pinata.pinJSONToIPFS()上传包含Blob的对象时,Blob会被序列化为空对象{},导致IPFS上仅存储空字段,取回后无法操作。

解决思路:先将Blob转换为JSON可兼容的格式(Base64字符串),同时保留Blob的类型信息;取回时再将Base64还原为Blob对象。

上传实现

const { Blob } = require('node:buffer');

// 创建目标Blob
const myBlob = new Blob(["Hey"], { type: 'text/plain' });

// 将Blob转为Base64字符串
const arrayBuffer = await myBlob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const blobBase64 = buffer.toString('base64');

// 构造可序列化的上传数据
const uploadPayload = {
  blobData: blobBase64,
  mimeType: myBlob.type
};

// 上传到Pinata
pinata.pinJSONToIPFS(uploadPayload)
  .then(result => console.log('上传完成:', result))
  .catch(err => console.error('上传失败:', err));

取回并还原Blob

const { Blob } = require('node:buffer');

// 从IPFS获取数据
const res = await fetch('https://gateway.pinata.cloud/ipfs/你的IPFS哈希值');
const storedData = await res.json();

// 将Base64转回Buffer
const buffer = Buffer.from(storedData.blobData, 'base64');

// 还原为Blob对象
const restoredBlob = new Blob([buffer], { type: storedData.mimeType });

// 验证结果
console.log(await restoredBlob.text()); // 输出: Hey

注意事项

  • Node.js 18+原生支持Blob,低版本需安装blob-polyfill包兼容。
  • 必须保留Blob的type属性,否则还原后的Blob无法正确识别数据类型。
  • 若Blob体积较大,可考虑直接上传Blob文件到IPFS(使用pinata.pinFileToIPFS),再将文件的IPFS哈希存入JSON,取回时通过哈希获取Blob。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:53:17