Java 如何使用servlet将PDF文件发送到客户端。?
我正在尝试使用servlet向客户端发送PDF文件的小代码。我开发了一个代码,附在下面。当我在glassfish服务器上的NetBeans中运行此代码时,会出现一个弹出的下载窗口,我单击“打开”选项,它会显示“格式有问题”,我无法看到文件中的内容。 有人能帮我解决这个逻辑错误吗Java 如何使用servlet将PDF文件发送到客户端。?,java,web-services,pdf,file-upload,Java,Web Services,Pdf,File Upload,我正在尝试使用servlet向客户端发送PDF文件的小代码。我开发了一个代码,附在下面。当我在glassfish服务器上的NetBeans中运行此代码时,会出现一个弹出的下载窗口,我单击“打开”选项,它会显示“格式有问题”,我无法看到文件中的内容。 有人能帮我解决这个逻辑错误吗 package com.transferPDF; import java.io.File; import java.io.FileInputStream; import java.io.IOExcept
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";
}
}
使用下面的标题
response.setHeader("Content-Disposition", "attachment; filename=\"test.pdf\"");
您只需要对编写PDF的方式做一些更改 我在这里得到了返回正确渲染的PDF的代码
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-Type", "application/pdf");
File filePDF = new File("c:\\my.pdf");
FileInputStream fis = new FileInputStream(filePDF);
OutputStream os = response.getOutputStream();
try
{
response.setContentLength((int) filePDF.length());
int byteRead = 0;
while ((byteRead = fis.read()) != -1)
{
os.write(byteRead);
}
os.flush();
}
catch (Exception excp)
{
excp.printStackTrace();
}
finally
{
os.close();
fis.close();
}
}
你能不能把它保存在某个地方,然后检查一下,而不是打开它?是的,我这样做了。但是同样的情况@DavidT.macknetame当您尝试打开保存的版本时会发生什么情况?在通过此代码发送之前,您已经验证了您可以打开它-它在保存时没有损坏,而不是在输出时损坏?是的。我自己创建了test.PDF,它在任何情况下都没有损坏。@DavidT.MacknetAnd/or add
ContentType=“application/PDF”
您是否用系统上的正确路径替换了PDF的路径?还有,你说它不工作是什么意思?我用那个代码下载了PDF。不工作意味着我应用了你的代码片段,但我看到了相同的输出。替换正确的路径是什么意思@AdamRice@NirmalPurohit如果您直接复制/粘贴我的代码,它将无法工作。除非你的系统上有C:\my.pdf。我知道编码标准以及如何在我的程序中使用建议的代码。我将您的文件路径替换为我的