1

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

我阅读了文件并准备发送,如下所示:

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

问题是某些东西似乎在填充流。请参阅下面的图片,将 before.png 源文件与在目的地收到的文件进行比较。EF BF BD 的序列表明 .slice() 没有给我底层字节,可能是强制转换为 UTF-8 编码的东西。

在此处输入图像描述

我也尝试通过 toString() 获取字节,但那里没有 bean。我仍然在上传的文件中看到损坏。

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

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


编辑以回应布拉德。我尝试了 concattin'g,但我仍然需要将我的对象转换回字符串,此时 UTF-8 字符似乎重新出现在流中。

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

1 回答 1

3

我认为正在发生的事情是,您实际上是在使用连接运算符,迫使 Node.js 将contentdata作为默认编码为 UTF-8 的字符串。试试这个:

content = Buffer.concat(content, data);

此外,没有理由获取完整数据长度的切片。您可以按原样使用整个传入缓冲区。

于 2013-07-28T15:59:33.763 回答