gpt4 book ai didi

javascript - Expressjs : issue with image file encoding during res. 下载

转载 作者:行者123 更新时间:2023-11-30 17:15:59 24 4
gpt4 key购买 nike

我有一个非常普通的 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)可以在这里找到:http://www.sycomor.fr/test/ ;我还添加了一个类似的图像,该图像不受下载的影响并且干净利落。值得一提的是,这两张照片相隔几分钟,使用相同的相机在相同的设置下拍摄,所以我强烈怀疑问题是由某些外部来源引起的。

谢谢!

最佳答案

您的问题来自快速配置中的“connect-livereload”。它在注入(inject)重新加载脚本时破坏了二进制流。

引用https://github.com/intesso/connect-livereload/issues/39了解详情。

关于javascript - Expressjs : issue with image file encoding during res. 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com