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

Postman中将Base64编码数据转为二进制并下载为文件的问题

解决Base64编码图片转本地PNG文件的问题

错误原因分析

你遇到的TypeError: fs.writeFileSync is not a function错误,本质是环境不兼容:

  • fs是Node.js专属的文件系统模块,**浏览器/前端自动化测试环境(如Cypress)**没有这个API,直接调用会报错
  • 如果是Node.js环境,大概率是没正确引入fs模块

下面分场景给出可行解决方案:


方案1:Node.js环境(如Mocha/Jest自动化脚本)

直接用Node.js的Buffer和fs模块处理,无需先转Uint8Array,步骤更简洁:

const fs = require('fs');
const path = require('path');

// 替换为你的API返回的Base64数据
const base64EncodedData = 'iVBORw0KGgoAAAANSUhEUgAAAMsAAAAyCAYAAADyZi/iAAADsElEQVR42u2aMWgUQRSGwxVBJI2E4wiSJsgRJNiIpDhEBLGQKyRgIUFCEIJISGUnFiIBkRQpJK1YhECwSiGBIFcEsZEQgkgaEREJEpBDRIIcrG9gDsdxbnd2s7u3d34fPEKSebM7M++fffN2BwYAAAAAAAAAAAAAAKDXCCwyukZJ7JbYutgnsZ9irayvC38W4GLgoMfGsGbdvgqisQT9nNG+JqtFEIt0OS62H0RARGcXZCfFPvSBWIbFvlpD2E7Qz7bVh+pzuNtike6G9JMkQCzdC7Llfpl0ueUbjmHMx/BfcPhPFSENk+7uW91/FLsiNkgU5xNcNWPym/2wQ+lc3uS72KiH35jYD8v3RVHOLNJdw+r+MhGcX1CdsNKv230ilrLYoTWULQ+/Lcvnm1ilQGKxhVwiivMLqiVj4ht5VXNyGtu0I52aDWl/x9F+ukjVMCpe3QumSWPej9pVo6wWW7q6pqtVB2K/dLVpV+xR2OFZ/ld3+O2JPREbibjmhuNJMeJoN6pTNZONhOPsOH/GHDSNseyILUaNpZ82sl4TyqBVfryXxoK4fHVK9CqieKNSpktWXxWx1xF+KvivhtzPiG4TKgJH+tX0Cd4Yc6CqdJsRY1FirUf1RyUsf7E8NuZ2N63dy7Fup8Teea6xCpaqEeRfPP3U7jwRck+zDp+bxv9n4qRrCeZAlXvfeo5FPW0mEUtxhHLBmFeVA5/NUCzrxnuK+fZurZ9sMzq1Mmnot9M7+vcDT783MQ/uh3q3dz15No85vzar+udnfS4q63bq3dacoxCxh1iKk369N+Z1Mc28uMPa7bcDxNG+qs9Lf5VqE/rVQu7LdSZZc5xpVJvTKYsl0E/XTmM5bx/c1dcUnFm6L5aHVhAPZiyWf55cDp+nHfzGI/xWLJ+liPZzHpvy3RTm2JVaVSN8nlk+y4ilu0I5Z+1gtbQXxBEoax4+dVfqksDvpYdPWKGhkdI82zz38JnySQURSz5CKVkH7ZUsypNJPhPRRYA0/JoePq439IH+21hGYrnu4VP2GQtiyT/9UlWmoZzEUvEUchp+R5736Pr2ayHFuc5sLIgle6FMWOlXPc5iHydQcvZrZX29bo8FsWSffu3FPEP0qliCPhJLgFjyF8sD6233MGJBLOCe3FbcjwIRC2L5X8WSOogFsSAWxIJYEAtiQSyQi8A4syAWQCyIBRALYgHEglgQC2JBLIgFsSAWxIJYEAtiAQAAAAAAAAAAAAAAAAAAAAAAAACAAvIbRNwB01NnU/AAAAAASUVORK5CYII=';

// 处理Base64前缀(如果API返回的是带"data:image/png;base64,"开头的,必须去掉)
const cleanBase64 = base64EncodedData.startsWith('data:image/png;base64,') 
  ? base64EncodedData.split('data:image/png;base64,')[1] 
  : base64EncodedData;

const folderPath = 'C:/test/downloadedFile/';
const fileName = 'example.png';
// 用path.join避免路径拼接的兼容性问题
const filePath = path.join(folderPath, fileName);

// 直接转换并写入文件
fs.writeFileSync(filePath, Buffer.from(cleanBase64, 'base64'));

方案2:浏览器/前端自动化测试环境

浏览器环境不支持fs模块,需用Blob或测试工具提供的API处理:

通用浏览器方法(创建下载链接)

const base64EncodedData = '你的Base64数据';
const cleanBase64 = base64EncodedData.startsWith('data:image/png;base64,') 
  ? base64EncodedData.split('data:image/png;base64,')[1] 
  : base64EncodedData;

// 将Base64转为Blob对象
const blob = new Blob([Uint8Array.from(atob(cleanBase64), c => c.charCodeAt(0))], { type: 'image/png' });
const downloadUrl = URL.createObjectURL(blob);

// 创建a标签触发下载
const downloadLink = document.createElement('a');
downloadLink.href = downloadUrl;
downloadLink.download = 'example.png';
document.body.appendChild(downloadLink);
downloadLink.click();

// 清理资源
document.body.removeChild(downloadLink);
URL.revokeObjectURL(downloadUrl);

Cypress专用方法

Cypress内置了cy.writeFile方法,可直接处理二进制数据:

cy.request('GET', '你的API接口地址')
  .then(response => {
    const base64Data = response.body.base64EncodedData;
    const cleanBase64 = base64Data.startsWith('data:image/png;base64,') 
      ? base64Data.split('data:image/png;base64,')[1] 
      : base64Data;
    // 用Buffer转换后写入
    cy.writeFile('C:/test/downloadedFile/example.png', Buffer.from(cleanBase64, 'base64'), 'binary');
  });

Playwright专用方法

Playwright运行在Node.js环境,可直接结合fs处理:

const { chromium } = require('playwright');
const fs = require('fs');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  // 发起API请求
  const response = await page.request.get('你的API接口地址');
  const responseData = await response.json();
  const base64Data = responseData.base64EncodedData;
  
  const cleanBase64 = base64Data.startsWith('data:image/png;base64,') 
    ? base64Data.split('data:image/png;base64,')[1] 
    : base64Data;
  
  // 写入文件
  fs.writeFileSync('C:/test/downloadedFile/example.png', Buffer.from(cleanBase64, 'base64'));
  
  await browser.close();
})();

关键注意事项

  • 必须清理Base64前缀:如果API返回的Base64带有data:image/png;base64,前缀,一定要先去掉,否则转换后的文件会损坏无法打开
  • 环境匹配:Node.js环境用fs,浏览器/前端测试环境用Blob或对应工具的API,不要跨环境调用不兼容的模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:54:59