Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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
Javascript Expressjs:res.download期间图像文件编码出现问题_Javascript_Node.js_Image_Express_Encoding - Fatal编程技术网

Javascript Expressjs:res.download期间图像文件编码出现问题

Javascript Expressjs:res.download期间图像文件编码出现问题,javascript,node.js,image,express,encoding,Javascript,Node.js,Image,Express,Encoding,我有一个非常普通的node.js服务器,本地安装了expressjs用于开发;我存储各种文件,并通过基本的HTTP调用请求它们,该调用通过express的res.download功能返回文件。在大多数情况下,这项工作不会遇到任何问题。但是,对于非常小的文件子集,最终用户接收到的文件比预期的要大得多(几乎是2倍),并且任何常规查看器都无法读取。在大约一百个文件中,这种情况只发生过两次,都是JPG文件,但样本太小,无法得出任何结论。据我所知: 这个问题是可复制的:如果它发生在一个文件中,它总是会发

我有一个非常普通的node.js服务器,本地安装了expressjs用于开发;我存储各种文件,并通过基本的HTTP调用请求它们,该调用通过express的res.download功能返回文件。在大多数情况下,这项工作不会遇到任何问题。但是,对于非常小的文件子集,最终用户接收到的文件比预期的要大得多(几乎是2倍),并且任何常规查看器都无法读取。在大约一百个文件中,这种情况只发生过两次,都是JPG文件,但样本太小,无法得出任何结论。据我所知:

  • 这个问题是可复制的:如果它发生在一个文件中,它总是会发生
  • 问题与文件的存储方式无关:如果我将有问题的文件与另一个文件交换,但保持所有其他文件(名称、位置等)不变,则效果良好
  • 就在res.download发生之前,文件还可以:使用fs.stats检查其大小会返回正确的值
  • HTTP响应没有遇到任何可见问题:没有错误,响应代码为200
  • 源文件似乎有正常的元数据和JPG标记
更新我做了一些测试,这个问题似乎在某种程度上与编码有关:由于未知的原因,损坏的响应文件以UTF-8编码;大小差异源于所有非UTF-8字符被替换为
EF BF BD
(未知字符符号)!我仍然无法理解为什么会发生这种情况,是什么使这几个文件与其他文件不同,以及它是否可以在上游检测和/或纠正

更新2经过一些附加测试后,我仍然无法确定原因,但我可以添加以下信息:

  • 就系统而言,问题发生在fs.js中的数据流期间

  • 根本原因位于图像的EXIF数据中的某个位置

对于那些感兴趣的人,可以在这里找到源图像(source.JPG)和下载结果(response.JPG):;我还添加了一个类似的图像,该图像不受下载的影响,并且是干净的。值得一提的是,两张照片的拍摄间隔都是几分钟,同一台相机的设置相同,所以我强烈怀疑这个问题是由外部来源造成的


谢谢

您的问题来自express配置中的“connect livereload”。 它在注入重新加载的脚本时破坏二进制流

有关详细信息,请参阅