2012-07-11 2 views
0

J'ai JBoss en cours d'exécution en tant que serveur d'application et quelque part sur mon HD il y a un fichier PDF, qui est créé lorsque l'utilisateur clique sur une action spécifique. Disons que le fichier est ici: C:/PDF/doonot/10.07.2012/doonot.pdf. Comment puis-je offrir ce fichier en téléchargement? Je l'ai déjà fait pour un fichier CSV, mais je ne sais pas comment le faire avec un fichier PDF.Comment offrir le téléchargement de fichier PDF local en Java?

Toute aide est très appréciée.

+3

Comment l'avez-vous fait pour le fichier CSV? –

+0

utilisez-vous une sorte d'application Web pour offrir le fichier à télécharger ou utilisez-vous JBoss comme un serveur ftp? – MaVRoSCy

+0

Non, le fichier est simplement stocké sur le serveur. – doonot

Répondre

0

comme je l'ai écrit sur Is there a common way to download all types of files in jsp?

vous pouvez utiliser quelque chose comme ceci:

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; 
} 

MISE À JOUR:

Ne pas oublier que vous pouvez utiliser le InputStream comme ceci:

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

ou vous pouvez utilisez-le même comme ceci

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

Pouvez-vous expliquer comment cela fonctionne: "ICI VOUS LISEZ VOTRE FICHIER COMME BinaryStream"? – doonot

+0

@dooonot j'ai mis à jour ma réponse – MaVRoSCy

+0

Thx. Mais ce n'est pas un BinaryStream, n'est-ce pas? – doonot

0

Vous pouvez simplement écrire une servlet qui lit le pdf et l'écris dans le flux de sortie de réponse.

ici Exemple: http://www.java-forums.org/blogs/servlet/668-how-write-servlet-sends-file-user-download.html

+0

Bonne entrée, va essayer celui-là! Thx – doonot

+0

"Une erreur est survenue lors de l'ouverture de ce document.Le fichier est endommagé et n'a pas pu être réparé" ... – doonot

+0

Vous ajoutez probablement des données indésirables au début ou à la fin du fichier, ou pas de vidage, ou quoi que ce soit. Essayez de télécharger un fichier texte simple avec votre servlet pour voir ce qui se passe. – Anthony

0

Oui Gustav a raison. Java ne fait pas de distinction entre les types de fichiers. Un fichier est un fichier, si vous l'avez fait pour csv, il devrait aussi fonctionner pour pdf.

+0

non, ce n'est pas le cas. Il dit que le fichier est endommagé et n'a pas pu être réparé. – doonot

Questions connexes