1
我正在使用Node读取文件并试图将其作为多部分MIME文章发送,但遇到文件在接收端出现损坏问题。Node.js缓冲区和二进制文件
我读文件和发送像这样准备吧:
fs.readFile("before.png", function(err,data) {
// Snip
content += data.slice(0,data.length);
的问题是,有些事情似乎填充流。请参阅下面的图像,比较在目标处收到的untilpng源文件和文件。 EF BF BD的序列表明.slice()没有给我底层字节,可能是强制使用UTF-8编码的东西。
我还试图通过获得的toString字节(),但没有豆子那里。我仍然在上传的文件中看到损坏。
// 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) {
非常感谢您的创意建议。在某些时候,我确实需要将它转换回一个String来发送到我的HTTP帖子中。即使在concatt'ing和toString()整个事情后,我看到了同样的腐败。将我现在使用的代码附加到上面的帖子中,以便我可以格式化它。 –
TBC - 我不知道我是否患有这个人一样 - http://stackoverflow.com/questions/14855015/getting-binary-content-in-node-js-using-request –
@BenjaminWootton,你的问题然后与你的缓冲区无关,但与源数据编码。使用任何文件的编码,你的问题应该消失。如果你想要什么东西出来,那么你将不得不把文件视为二进制文件。不过你可以先尝试一下这个人的'none'编码。 – Brad