我完全被难住了。为了完整起见,我会给出背景,但我不确定它是否有帮助。我正在运行一个 Lift 实例的标准 Jetty 设置上运行 Lift 项目。Mac OS X。
我有一个片段可以转换 XML 输入,呈现图像,将其保存到 webroot/images/ 目录下的磁盘,文件名取自内容的 MD5,例如“c5669d3eedcf7d305dcf9f88a61b3ee0.png”。然后,该片段返回一个 img 标签,其中包含对生成图像的引用,以包含在输出中。
大多数情况下,大多数图像都有效。但大多数情况下,有些不是,有些图像不是由浏览器呈现的。尝试在浏览器(Camino 和 Firefox)中查看有问题的图像不起作用:图像未显示,这表明存在隐约错误。
在另一个浏览器(Safari 和 QuickTime)中查看它,图像工作正常。下载并打开图像工作正常。直接使用 Camino(即 file://...)查看文件时,图像显示正常:文件本身没有明显损坏。
它不能是文件名的长度,因为所有文件名都是相同的 37 个字符。
我只能假设通过 Jetty 服务时图像的传输出现问题。
确实失败的 URI 始终失败,它不是间歇性的。重启Jetty没有什么区别,所以我认为不是文件是在服务器启动后创建的。此外,渲染是一个阻塞调用,因此在发送 HTML 并且浏览器请求图像之前,文件不可能仍然打开/尚未保存。
我唯一能想象的是 MIME 类型被破坏了,所以我在 web.xml 中放置了适当的映射,但仍然没有雪茄。MIME 类型看起来没问题,我已经验证了字节数是正确的。
对于问题图像:
HTTP/1.1 200 正常 过期:1970 年 1 月 1 日星期四 00:00:00 GMT 设置 Cookie:JSESSIONID=1dbeh8eq4mtu0;路径=/ 内容类型:图片/png 内容长度:25488 最后修改时间:2009 年 7 月 25 日星期六 15:38:19 GMT 服务器:码头(6.1.16)
为了完整起见,来自加载正常的图像的标题:
HTTP/1.1 200 正常 过期:1970 年 1 月 1 日星期四 00:00:00 GMT 设置 Cookie:JSESSIONID=15dt649lzovc4;Path=/ 内容类型:图片/png 内容长度:18657 最后修改时间:2009 年 7 月 25 日星期六 15:41:35 GMT 服务器:码头(6.1.16)
对此非常非常不解。有什么线索吗?
干杯
乔