3 回答
TA贡献1802条经验 获得超5个赞
尝试使用:const encoded = Buffer.from(stringValue, 'base64').toString();
或atob()
和btoa()
函数(在客户端)。
TA贡献1804条经验 获得超7个赞
readLine.createInterface
和 的组合fs.createReadStream
没有多大意义,因为已经触发了和等createReadStream
事件。data
error
end
问题还在于您通过 读取line
,但这不是读取二进制文件的方式。如何在二进制(此处为 .mp3)文件中定义一行?该代码似乎读取不同大小的数据块(无论它认为是一行),并附加一个字符串。可能被解释为行结束的字节丢失了。
最后,当文件非常大时,您也会遇到麻烦,因为您将所有内容添加到字符串中,然后从中创建一个缓冲区并立即输出。因此,它需要的内存大小是 mp3 文件大小的 3 倍以上。
下面的解决方案仅使用fs.createReadStream
块的大小并将其限制为 60.000 字节,方法是设置{highWaterMark : 60000}
.
注意:默认大小为 65536,但这不适用于以下 base64 编码。数据大小必须是3的倍数!
收到的data
是a buffer
,可以base64
直接转成。
const fs = require('fs');
var file = "test.mp3";
let stream = fs.createReadStream(file, {highWaterMark : 60000});
stream.on('data', (data) => {
console.log("data length " + data.length)
var base = data.toString('base64');
fs.appendFile('test.b64', base, function (err,data) {
if (err) {
return console.log(err);
}
console.log("wrote " + base.length + " bytes");
})
}).on('error', err => {
console.log(err);
}).on('end', () => {
console.log("success");
});
添加回答
举报