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

Node.js中Blob与Base64互转后Blob大小不一致,如何还原原Blob?

Node.js中Blob与Base64精准互转的解决方案

问题根源

你当前的代码使用blob.text()处理二进制数据会导致数据失真:text()默认按UTF-8解码二进制内容,遇到无法被UTF-8识别的字节时,会自动替换为Unicode替换字符�(U+FFFD),破坏了原始字节序列,最终导致转回的Blob大小与原数据不一致。

正确互转实现

1. Blob转Base64

使用arrayBuffer()获取原始二进制数据,避免编码转换导致的失真:

// Blob转Base64
const arrayBuffer = await myBlob.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const base64Str = buffer.toString('base64');

2. Base64转回Blob

将Base64转为Buffer后,再转为Uint8Array,同时保留原Blob的MIME类型:

// Base64转回Blob
const buffer = Buffer.from(base64Str, 'base64');
const uint8Array = new Uint8Array(buffer);
const restoredBlob = new Blob([uint8Array], { type: myBlob.type });

验证数据一致性

可以通过对比原始Blob和恢复后Blob的二进制数据来确认完全一致:

const originalBuffer = await myBlob.arrayBuffer();
const restoredBuffer = await restoredBlob.arrayBuffer();
console.log(originalBuffer.byteLength === restoredBuffer.byteLength); // 输出true
console.log(new Uint8Array(originalBuffer).every((val, idx) => val === new Uint8Array(restoredBuffer)[idx])); // 输出true

内容的提问来源于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 19:33:18