3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
嘗試使用:const encoded = Buffer.from(stringValue, 'base64').toString();
或atob()
和btoa()
函數(shù)(在客戶端)。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
readLine.createInterface
和?的組合fs.createReadStream
沒有多大意義,因?yàn)橐呀?jīng)觸發(fā)了和等createReadStream
事件。data
error
end
問題還在于您通過 讀取line
,但這不是讀取二進(jìn)制文件的方式。如何在二進(jìn)制(此處為 .mp3)文件中定義一行?該代碼似乎讀取不同大小的數(shù)據(jù)塊(無論它認(rèn)為是一行),并附加一個(gè)字符串??赡鼙唤忉尀樾薪Y(jié)束的字節(jié)丟失了。
最后,當(dāng)文件非常大時(shí),您也會(huì)遇到麻煩,因?yàn)槟鷮⑺袃?nèi)容添加到字符串中,然后從中創(chuàng)建一個(gè)緩沖區(qū)并立即輸出。因此,它需要的內(nèi)存大小是 mp3 文件大小的 3 倍以上。
下面的解決方案僅使用fs.createReadStream
塊的大小并將其限制為 60.000 字節(jié),方法是設(shè)置{highWaterMark : 60000}
.
注意:默認(rèn)大小為 65536,但這不適用于以下 base64 編碼。數(shù)據(jù)大小必須是3的倍數(shù)!
收到的data
是a?buffer
,可以base64
直接轉(zhuǎn)成。
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");
});
添加回答
舉報(bào)