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

如何在Node.js中将二进制bin文件转换为JPEG格式

问题原因

你代码里多余的Buffer转ArrayBuffer操作是导致文件损坏的核心原因:

  • Node.js内置的Buffer本身就是Uint8Array的子类,fs.writeFile原生支持直接写入Buffer类型数据,完全不需要额外转成ArrayBuffer
  • Uint8Array.from(buffer).buffer 拿到的是Buffer实例对应的底层ArrayBuffer,若原始Buffer存在字节偏移,这个操作会拿到超出原始Buffer范围的冗余数据,导致写入的文件包含多余内容,自然损坏
  • 如果你是通过fs.readFile读取原始.bin文件拿到的data,如果读取时错误指定了utf8之类的文本编码,也会导致原始二进制数据提前被破坏,后续转换也无法恢复

解决方法

你提供的.bin文件开头带有JFIF标识,说明文件本身就是标准JPEG格式,只是后缀名被改为了.bin,不需要做任何格式转码,只要保证二进制内容完整写入就能正常打开,对应两种常见场景的正确代码如下:

场景1:直接读取本地.bin文件后转存为jpeg

读取.bin文件时不要指定任何编码参数,拿到的data本身就是可用的Buffer,直接写入目标文件即可:

const fs = require('fs')

// 读取.bin文件时不指定编码,默认返回Buffer
fs.readFile('你的源文件.bin', (err, data) => {
  if (err) return console.log(err)
  // 直接写入Buffer即可,不需要任何转换
  fs.writeFile('id.jpeg', data, (err) => {
    if (err) return console.log(err)
    console.log('文件保存成功')
  })
})

场景2:data是外部传入的二进制字符串

如果你的data是从接口、其他模块拿到的二进制字符串,保留Buffer.from转换逻辑,直接写入生成的Buffer即可:

const fs = require('fs')

const buffer = Buffer.from(data, 'binary')
fs.writeFile('id.jpeg', buffer, (err) => {
  if (err) return console.log(err)
  console.log('文件保存成功')
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:45:03