我写了一个简单的Node.js应用程序来传输内容(主要用于视频,但其他东西也有效)。它似乎工作得很好,除了一些jpegs,其中图像的底部并不总是显示。
这是一个例子,左边缺少图片的底部。
显示问题的网站是here,没有问题的外观相同的网站是here。 (第一个链接的大多数图像底部应该有粉红色的位。)
该应用的代码为on Github,但我猜重要的行是
stream = fs.createReadStream(info.file, { flags: "r", start: info.start, end: info.end });
stream.pipe(res);
(所以所有繁重的工作都是由stream.js完成的,而不是我的代码。)
process.stdout
并将输出保存到文件中,则会显示整个图像。stdout
的文件与原件相同。浏览器测试(超过3台计算机和1个VM)
我真的不知道这里发生了什么。我认为它可能是一个奇怪的图形驱动程序错误,但行为在我尝试过的所有计算机上都是一致的。我发现很难将Node.js /我的代码归咎于此,因为它似乎正在传输整个文件,但是没有它就可以正常工作。
如果需要,很高兴提供更多详细信息。
*显然我没有尝试过所有可能的文件类型,但是png,渐进式jpeg,文本和视频似乎都有效。
答案 0 :(得分:0)
事实证明,问题是标题(header["Content-Length"]
)中发送的文件大小。我将其设置为info.end - info.start
,而实际大小为1。有些浏览器不喜欢这样,在屏幕上显示时错过了图片的结尾。哎呀。