我有一个非常普通的node.js服务器,本地安装了expressjs用于开发目的;我存储各种文件并通过基本HTTP调用请求它们,该调用通过express'res.download功能返回文件。大部分时间,这都顺利进行。然而,对于非常小的文件子集,最终用户接收的文件比预期的大得多(几乎是2倍),并且任何传统的观看者都无法读取。可能有一百个文件,这只发生过两次,都是JPG文件,但样本太小而无法得出任何结论。我所知道的:
更新我做了一些测试,问题似乎与编码有某种关系:由于原因未知,错误的响应文件以UTF-8编码;大小差异来自所有被EF BF BD
(未知字符符号)替换的非UTF-8字符!我仍然无法理解它为什么会发生,是什么让这些文件与其他文件不同,以及是否可以在上游检测和/或纠正它们。
更新2 经过一些额外的测试,我仍然无法确定原因,但我可以添加以下信息:
系统方面,问题发生在fs.js的数据流中
根本原因位于图像的EXIF数据中的某处
对于那些感兴趣的人,可以在这里找到源图像(source.JPG)和下载结果(response.JPG):http://www.sycomor.fr/test/;我还添加了一个不受下载影响的类似图像,并且干净利落。对于它的价值而言,两张照片是相隔几分钟拍摄的,相同的相机设置相同,所以我强烈怀疑这个问题是由一些外部资源引起的。
谢谢!
答案 0 :(得分:2)
您的问题来自快速配置中的“connect-livereload”。 它在注入重载脚本时会破坏二进制流。
有关详细信息,请参阅https://github.com/intesso/connect-livereload/issues/39。