Node.js写入原始图像数据
我正在编写一个node.js服务器,对于站点的一部分,用户需要能够上传图像。上载图像时,其在服务器上的副本已损坏 下面是主体解析器的脚本Node.js写入原始图像数据,node.js,ansi,Node.js,Ansi,我正在编写一个node.js服务器,对于站点的一部分,用户需要能够上传图像。上载图像时,其在服务器上的副本已损坏 下面是主体解析器的脚本 request.body = {}; var busboy = new Busboy({headers: request.headers}); busboy.on("field", function(fieldname, val) { request.body[fieldname] = val; }); busboy.on("file", function
request.body = {};
var busboy = new Busboy({headers: request.headers});
busboy.on("field", function(fieldname, val) {
request.body[fieldname] = val;
});
busboy.on("file", function(fieldname, file, filename) {
var fileContents = "";
file.on("data", function(data) {
fileContents += data;
});
file.on("end", function() {
request.body[fieldname] = {"filename": filename, "contents": fileContents};
});
});
busboy.on("finish", function() {
next(request, response);
});
request.pipe(busboy);
当上传文本文件时,服务器会很好地保存它,但图像文件中的某些符号不会正确发送或接收
这是因为数据是一个缓冲区,在默认情况下,当您将其视为字符串(通过将其附加到另一个字符串)时,编码是UTF8。解决方案是,不要将其视为字符串,而是将其视为缓冲区,这样就不会以错误的代码点告终帕特里克·罗伯茨
正如帕特里克所说,问题在于
fileContents+=数据代码>。这将数据
缓冲区转换为字符串,其中不能包含所需的字符。相反,我将每个数据缓冲区添加到一个数组中,然后将它们全部连接起来,并将其写入一个文件。用ANSI编写文件?什么?图像文件是二进制数据,这实际上并不取决于编码的选择。是什么导致您将其确定为问题?您是否查看了“损坏”文件,检查了它是否包含HTTP头或一些垃圾数据?如果没有一些代码,很难判断发生了什么。这是因为数据是一个字符串,默认情况下,当您将其视为字符串(通过将其附加到另一个字符串)时,编码是UTF8。解决方法是不要把它当作字符串,把它当作缓冲区,这样你就不会得到格式不正确的代码点。@AurelBílý我不想把它作为答案发布,因为我不想承担详细解释示例代码含义的责任。如果其他人想复制我的评论作为答案和详细说明,请随意。谢谢@PatrickRoberts我存储了缓冲区而不是字符串,并将它们全部浓缩,然后将缓冲区写入文件,效果很好。