Node.js缓冲区和二进制文件

我正在使用Node读取一个文件,并尝试将其作为多部分MIME邮件发送,但遇到文件在接收端出现损坏的问题。

我读了这个文件,准备发送这样的文件:

fs.readFile("before.png", function(err,data) { // Snip content += data.slice(0,data.length); 

问题是,似乎填补了stream。 请参阅下面的图像,将之前的源文件与在目的地处收到的文件进行比较。 EF BF BD的序列表明.slice()没有给我底层的字节,可能强制UTF-8编码。

在这里输入图像说明

我也尝试通过toString()获取字节,但没有豆。 我仍然看到在上传的文件中的腐败。

  // content += data.toString() // UTF-8 default content += data.toString('binary') 

我怀疑默认的toString()也强制二进制文件为UTF-8,但会期望“二进制”给我的底层字节stream?


编辑回应布拉德。 我尝试concattin'g但我仍然需要翻译我的对象回到一个string,在这一点上的UTF-8字符似乎重新出现在stream中。

 contentToSend = Buffer.concat([ header, data, footer ] ); this.oauth.post( endpoint, accessToken, accessTokenSecret, contentToSend.toString(), contentType, function( x, y, z ) { 

我认为发生的事情是你实际上使用了一个串联运算符,迫使Node.js将contentdata视为string,默认编码为UTF-8。 试试这个:

 content = Buffer.concat(content, data); 

另外,没有理由对全部数据进行分割。 您可以按原样使用整个传入缓冲区。