swf发送servlet不适用于IE

时间:2010-03-03 09:00:31

标签: internet-explorer jsp servlets flash

我试图在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();

2 个答案:

答案 0 :(得分:0)

确保确切位上的Content-Length 正确。出于测试目的,您可以将其取消。应用程序不能再计算加载完成之前需要多长时间,但它应该可以工作。如果内容长度错误,那么浏览器会期望更多的字节来等待(当内容长度大于实际文件长度时),或者浏览器将中止下载并最终得到一个不完整的Flash文件(当内容长度小于实际文件长度。)

另一个可疑的事情是Content-Disposition标题。您没有明确将其设置为inline。您永远不会知道IE,因此请尝试将其明确设置为inline,或者只是为了测试目的而将其取消。

顺便说一下,DataInputStream在这里是多余的。你没有利用它的任何方法。摆脱它并坚持FileInputStream。或者,为了更好地提高性能,请改为使用BufferedInputStream换行(并对BufferedOutputStream执行相同的响应)。

答案 1 :(得分:0)

我尝试了你提供的一切。它没有帮助。 我尝试将标头缓存更改为:

response.setHeader("cache-control", "must-revalidate");

我完全不知道为什么,但它最终适用于IE。

谢谢!!