我想要一个接受PDF文件并显示它的Web应用程序,但我收到一个HTTP 500错误。我认为它是从请求中提取字节数组并将其添加到响应输出流中。 好吧,我错在哪里?
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
您应该从多部分请求中获取有效的部分。您可以使用Apache Commons FileUpload,或与Servlets 3.0规范一起使用:
Part filePart = request.getPart("f"); // Retrieves <input type="file" name="f">
InputStream filecontent = filePart.getInputStream();
// ... read input stream
你想把一个PDF文件发送到浏览器,你应该在outputStream
写流之前写一个response.setContentType("application/pdf")
;
确保只调用response.getOutputStream()
一次:
OutputStream os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
上传的文件不作为请求参数包含。这就是代码中NullPointerException
的原因。您必须通过请求的输入流获取 pdf 内容。为此,请使用第三个 pary 库或 Servlet 3 规范。
如果您想设置 http 标头(即内容类型),您应该在通过 response.setHeader()
将任何字节写入OutputStream
之前设置它们。