Я пытаюсь загрузить файл PDF в классе Struts Action.Проблема в том, что при использовании
response.setHeader("Content-Disposition", "attachment;filename=file.pdf");
я хочу открыть окно для «сохранить / открыть», но теперь содержимое PDF записывается в браузере: например,
%PDF-1.4 28 0 obj << /Type /XObject /Subtype /Image /Filter /DCTDecode /Length 7746 /Width 200 /Height 123 /BitsPerComponent 8 /ColorSpace /DeviceRGB >>...(cut)
Я пытался этот код(ниже) под Chrome, Firefox и IE и везде это то же самое.Также я использовал разные PDF-файлы для этого.
Мой фрагмент кода:
try {
URL fileUrl = new URL("file:///" + filePath);
URLConnection connection = fileUrl.openConnection();
inputStream = connection.getInputStream();
int fileLength = connection.getContentLength();
byte[] outputStreamBytes = new byte[100000];
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=file.pdf");
response.setContentLength(fileLength);
outputStream = response.getOutputStream();
int iR;
while ((iR = inputStream.read(outputStreamBytes)) > 0) {
outputStream.write(outputStreamBytes, 0, iR);
}
return null;
} catch (MalformedURLException e) {
logger.debug("service", "An error occured while creating URL object for url: "
+ filePath);
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return null;
} catch (IOException e) {
logger.debug("service", "An error occured while opening connection for url: "
+ filePath);
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return null;
} finally {
if (outputStream != null) {
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
inputStream.close();
}
return null;
Чего-то еще не хватает?
РЕДАКТИРОВАТЬ
Когда я использую этот код вКласс Struts не работает, но когда я использую этот код в сервлете, он работает.Самое странное, что когда я в классе действия пишу только «response.sendRedirect ()» в Servlet (а вся логика в Servlet), он тоже не работает.
Когда я анализировал заголовки ответа, все в этихтри примера одинаковы.