Читать и открывать PDF в новом окне браузера с помощью JSF
Java / JSF
Я пытаюсь открыть PDF в новом окне браузера, а не загружать его, но при каждой попытке файл загружается с успехом, и он открывает новую вкладку только с приложением, а не с файлом PDF.
<p:commandLink title="report" target="_blank"
action="#{managedBean.generateReport('P',true)}"
ajax="false" immediate="false" >
</p:commandLink>
Управляемый компонент: генерировать отчеты о вызовах downloadFile
Параметр filePath ниже = /temp/doc/abc.pdf (chmod 777)
public static void downloadFile(String filePath) throws IOException{
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context
.getExternalContext().getResponse();
File file = new File(filePath);
if (!file.exists()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType("application/octet-stream");
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition", "attachment;filename=\""
+ file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try
{
input = new BufferedInputStream(new FileInputStream(file),
DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(),
DEFAULT_BUFFER_SIZE);
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally
{
input.close();
output.close();
}
context.responseComplete();
}
Мой плагин Chromium включен:
3 ответа
Решение
Он должен быть установлен на тип содержимого PDF ("application/pdf"), если вы хотите, чтобы браузер знал, что это PDF. Вы устанавливаете его в "application/octet-stream".
На этой линии
response.setHeader("Content-Disposition", "attachment;filename=\"" + file.getName() + "\"");
заменить
response.setHeader("Content-Disposition", "filename=\"" + file.getName() + "\"");
удалить ==> вложение; тогда Pdf откроется в новой вкладке