我试图在jsp页面上渲染swf 我可以显示本地文件“waf.swf”,但每当我使用servlet地址时,它在IE上失败但在Firefox上运行
这是servlet代码
ServletOutputStream out = response.getOutputStream();
response.setContentType("application/x-shockwave-flash");
response.setContentLength(length);
response.setHeader("Content-Disposition", "filename=\"" + file.getName() + "\"" );
response.setHeader("cache-control", "no-cache");
byte[] bbuf = new byte[1024];
DataInputStream in = new DataInputStream(new FileInputStream(file));
while ((in != null) && ((length = in.read(bbuf)) != -1))
out.write(bbuf,0,length);
in.close();
out.flush();
out.close();
答案 0 :(得分:0)
确保确切位上的Content-Length
正确。出于测试目的,您可以将其取消。应用程序不能再计算加载完成之前需要多长时间,但它应该可以工作。如果内容长度错误,那么浏览器会期望更多的字节来等待(当内容长度大于实际文件长度时),或者浏览器将中止下载并最终得到一个不完整的Flash文件(当内容长度小于实际文件长度。)
另一个可疑的事情是Content-Disposition
标题。您没有明确将其设置为inline
。您永远不会知道IE,因此请尝试将其明确设置为inline
,或者只是为了测试目的而将其取消。
顺便说一下,DataInputStream
在这里是多余的。你没有利用它的任何方法。摆脱它并坚持FileInputStream
。或者,为了更好地提高性能,请改为使用BufferedInputStream
换行(并对BufferedOutputStream
执行相同的响应)。
答案 1 :(得分:0)
我尝试了你提供的一切。它没有帮助。 我尝试将标头缓存更改为:
response.setHeader("cache-control", "must-revalidate");
我完全不知道为什么,但它最终适用于IE。
谢谢!!