Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js写入原始图像数据_Node.js_Ansi - Fatal编程技术网

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

我正在编写一个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(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我存储了缓冲区而不是字符串,并将它们全部浓缩,然后将缓冲区写入文件,效果很好。