-1

我想要一个接收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
4

3 回答 3

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
于 2013-09-25T09:19:47.213 回答
0

你想发送一个PDF文件到浏览器,你应该在写流response.setContentType("application/pdf")之前outputStream写一个;

于 2013-09-25T09:24:25.857 回答
0

确保response.getOutputStream()只调用一次:

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

上传的文件不包含在请求参数中。这就是代码中的原因NullPointerException。您必须通过请求的输入流获取 pdf 内容。为此目的使用第三方库或 Servlet 3 规范。

如果您想设置 http 标头(即内容类型),您应该在将任何字节写入OutputStreamvia之前设置它们response.setHeader()

于 2013-09-25T09:38:35.973 回答