2013-09-25 1 views
-1

Я хочу использовать веб-приложение, которое принимает файл PDF и отображает его, но я получил ошибку http 500.I думал, что он получил извлечение байтового массива из запроса и добавив его в выходной поток ответа. ну где я был не прав?сервлет, чтобы отобразить pdf-файл, используя переопределение doPost()

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    response.getOutputStream().write(request.getParameter("f").getBytes()); 
    response.getOutputStream().flush(); 
    response.getOutputStream().close(); 
} 

здесь HTML-страница

<body> 
<form action="display" method="post" enctype="multipart/form-data"> 
PDF FILE : <input type="file" name="f"> 
<input type="submit" value="display"> 
</form> 
</body> 

здесь ошибка, что я получил

java.lang.NullPointerException 
    display.doPost(display.java:43) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722 
+0

Используйте Apache для хранения файлов. –

ответ

2

Вы должны получить действительную часть от вашего многочастного запроса. Вы можете использовать Apache Commons FileUpload, или с Servlets 3.0 Spec:

Part filePart = request.getPart("f"); // Retrieves <input type="file" name="f"> 
InputStream filecontent = filePart.getInputStream(); 
// ... read input stream 
0

Вы хотите отправить файл PDF в браузере, вы должны написать response.setContentType("application/pdf")outputStream, прежде чем пишет поток;

+0

да, но у меня есть исключение с нулевым указателем ... как вы думаете, это произошло бы, потому что я установил тип содержимого? – Alvin

0

Обязательно позовите response.getOutputStream() только один раз:

OutputStream os = response.getOutputStream(); 
os.write(bytes); 
os.flush(); 
os.close(); 

Загруженный файл не содержится в качестве параметра запроса. Это и есть причина для NullPointerException в вашем коде. Вы должны получить pdf-контент через входной поток запроса. Для этой цели используйте третью библиотеку pary или спецификацию Servlet 3.

Если вы хотите установить заголовки http (т. Е. Для типа содержимого), вы должны установить их перед записью любых байтов в OutputStream через response.setHeader().

Смежные вопросы