我正在尝试使用servlet将PDF文件发送到客户端的小代码。我已经开发了一个代码,在下面讨论。当我在Glassfish服务器上的NetBeans中运行此代码时,出现一个弹出式下载窗口,并且我点击打开选项它说“格式有问题”,我无法看到来自文件的内容。 那么谁能帮我解决这个逻辑错误?如何使用servlet将PDF文件发送到客户端。
package com.transferPDF;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PDFserver extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int BUFF_SIZE = 1024;
byte[] buffer = new byte[BUFF_SIZE];
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=E:/test.pdf");
File filePDF=new File("E:/test.pdf");
FileInputStream fis = new FileInputStream(filePDF);
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
response.setContentLength((int) filePDF.length());
OutputStream os = response.getOutputStream();
try {
int byteRead = 0;
while ((byteRead = fis.read()) != -1) {
os.write(buffer, 0, byteRead);
}
os.flush();
} catch (Exception excp) {
excp.printStackTrace();
} finally {
os.close();
fis.close();
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
不是打开它,你可以将它保存在某个地方并检查它吗? –
是的,我这样做了。但是同样的情况@ DavidT.Macknet –
当你试图打开保存的版本时,会发生同样的事情吗?而且您已经验证过,您可以在通过此代码发送之前打开它 - 它在保存时不会损坏,而不会在输出中损坏。 –