сервлет отправки SWF не работает в IE - PullRequest
1 голос
/ 03 марта 2010

я пытаюсь сделать SWF на странице JSP я могу показать локальные файлы "waf.swf", но всякий раз, когда я использую адрес сервлета, он не работает в IE, но работает в firefox

это код сервлета

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 голосов
/ 03 марта 2010

Я перепробовал все, что вы предлагали. Это не помогло. Я попытался изменить кэш заголовка на:

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

Я понятия не имею, почему, но в конечном итоге это работает в IE.

спасибо !!

0 голосов
/ 03 марта 2010

Убедитесь, что Content-Length равно правильно для точного бита. В целях тестирования вы можете закомментировать его. Приложение может только не рассчитать, сколько времени пройдет до окончания загрузки, но оно должно работать. Если длина содержимого была неправильной, то либо браузер будет ожидать поступления большего количества байтов и, следовательно, ожидает (когда длина содержимого превышает фактическую длину файла), либо браузер прервет загрузку и в результате получит неполный файл флэш-памяти (когда длина содержимого меньше фактической длины файла).

Другая подозрительная вещь - заголовок Content-Disposition. Вы явно не установили его на inline. Вы никогда не знаете, с IE, поэтому попробуйте явно установить его на inline или просто закомментировать его для целей тестирования.

Кстати, DataInputStream здесь лишний. Вы не воспользовались ни одним из его методов. Просто избавьтесь от этого и придерживайтесь FileInputStream. Или, чтобы улучшить производительность, добавьте BufferedInputStream вместо этого (и то же самое с BufferedOutputStream для ответа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...