2012-07-11 93 views
0

我将JBoss作为应用程序服务器运行,并且我的HD上有一个PDF文件,当用户单击某个特定操作时会创建该文件。假设文件在这里:C:/PDF/doonot/10.07.2012/doonot.pdf。我怎样才能提供这个文件作为下载?我已经做了一个CSV文件,但我不知道如何使用PDF。如何提供Java下载本地PDF文件?

任何帮助,非常感谢。

+3

你是如何做CSV文件? – 2012-07-11 08:44:45

+0

您是否使用某种Web应用程序提供用于下载的文件,或者您是否像使用ftp服务器一样使用JBoss? – MaVRoSCy 2012-07-11 09:14:05

+0

不,该文件只存储在服务器上。 – doonot 2012-07-11 11:19:36

回答

0

正如我在Is there a common way to download all types of files in jsp?

写下你可以使用这样的事情:

public HttpServletResponse getFile (HttpServletRequest request ,HttpServletResponse httpServletResponse, .......){ 
      HttpServletResponse response = httpServletResponse; 
      InputStream in =/*HERE YOU READ YOUR FILE AS BinaryStream*/ 

      String filename = ""; 
      String agent = request.getHeader("USER-AGENT"); 
      if (agent != null && agent.indexOf("MSIE") != -1) 
      { 
      filename = URLEncoder.encode(/*THIS IS THE FILENAME SHOWN TO THE USER*/, "UTF8"); 
      response.setContentType("application/x-download"); 
      response.setHeader("Content-Disposition","attachment;filename=" + filename); 
      } 
      else if (agent != null && agent.indexOf("Mozilla") != -1) 
      { 
      response.setCharacterEncoding("UTF-8"); 
      filename = MimeUtility.encodeText(/*THIS IS THE FILENAME SHOWN TO THE USER*/, "UTF8", "B"); 
      response.setContentType("application/force-download"); 
      response.addHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); 
      } 


      BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); 
      byte by[] = new byte[32768]; 
      int index = in.read(by, 0, 32768); 
      while (index != -1) { 
       out.write(by, 0, index); 
       index = in.read(by, 0, 32768); 
      } 
      out.flush(); 

      return response; 
} 

UPDATE:

不要忘记,你可以使用InputStream的,因为这:

// read local file into InputStream 
InputStream inputStream = new FileInputStream("c:\\SOMEFILE.xml"); 

或者你可以即使是这样使用它

//read from database 
Blob blob = rs.getBlob(1); 
InputStream in = blob.getBinaryStream(); 
+0

你能解释这是如何工作的:“你在这里读取你的文件作为BinaryStream”? – doonot 2012-07-11 11:19:05

+0

@dooonot我更新了我的答案 – MaVRoSCy 2012-07-11 11:28:04

+0

Thx。但它不是BinaryStream,是吗? – doonot 2012-07-11 11:34:07

0

您可以简单地编写一个读取pdf的servlet并将其写入响应输出流。

为例这里:http://www.java-forums.org/blogs/servlet/668-how-write-servlet-sends-file-user-download.html

+0

良好的输入,会尝试这一个! Thx – doonot 2012-07-11 08:51:13

+0

“打开此文档时出错,文件已损坏,无法修复”... – doonot 2012-07-11 11:15:04

+0

您可能会在文件的开头或结尾处添加不需要的数据,或者不会刷新,或者其他任何内容。试着用你的servlet下载一个简单的文本文件来看看发生了什么。 – Anthony 2012-07-12 07:38:28

0

是古斯塔夫是正确的。 Java不区分文件类型。一个文件是一个文件,如果你为csv做过,它也应该用于pdf。

+0

不,它不。它说文件已损坏,无法修复。 – doonot 2012-07-11 11:16:10