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
相关产品推荐
相关产品推荐

