我想要接收pdf文件并显示它的网络应用程序,但我得到了一个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
答案 0 :(得分:2)
您应该从多部分请求中获得有效部分。您可以使用Apache Commons FileUpload,也可以使用Servlets 3.0规范:
Part filePart = request.getPart("f"); // Retrieves <input type="file" name="f">
InputStream filecontent = filePart.getInputStream();
// ... read input stream
答案 1 :(得分:0)
您想要将PDF文件发送到浏览器,您应该在response.setContentType("application/pdf")
写入流之前写一个outputStream
;
答案 2 :(得分:0)
请务必仅拨打response.getOutputStream()
一次:
OutputStream os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
上传的文件不包含在请求参数中。这就是代码中NullPointerException
的原因。您必须通过请求的输入流获取pdf内容。为此目的使用第三个pary库或Servlet 3规范。
如果您想设置http标头(即内容类型),则应在通过OutputStream
向response.setHeader()
写入任何字节之前设置它们。