2016-05-04 8 views
2

Ceci est mon fichier Strut.Je veux télécharger un fichier pdf qui est stocké dans le dossier qui est dans WebContent du projet

<action name="sample" class="com.action.getPdf" method="getPdf"> 
    <result name="success" type="stream"> 
     <param name="inputName">fileInputStream</param> 
     <param name="contentType">application/pdf</param> 
     <param name="contentDisposition">attachment;filename="${fileName}"</param> 
     <param name="bufferSize">1024</param> 
    </result> 
</action> 

et ce code d'action est où l'objet de fichier devient null.

public String getPdf()throws Exception 
    { 
     Session ss = HibernateUtils.getSess(); 
     Transaction t=ss.beginTransaction(); 
     HttpSession httpsession=request.getSession(); 
     String path2=request.getParameter("path1"); 
      ServletContext servletContext = ServletActionContext.getServletContext(); 
     //String path3=servletContext.getRealPath(path2); 
     System.out.println("the relative path of the file is:"+path2); 
     try 
      { 

      File fileToDownload = new File(path2); 
      fileInputStream = new FileInputStream(fileToDownload);    

      } 

      catch (Exception e) 
      { 
      if (t!=null) 
      { 
       t.rollback(); 
       e.printStackTrace(); 
      } 
      } 
      finally 
      { 
       ss.close(); 
      } 


     return "success"; 
     } 

J'ai stocké le fichier que je veux télécharger dans le dossier de contenu Web et j'ai stocké le chemin de celui-ci dans la base de données. Je ne sais pas quel est le problème.

Répondre

1

Le problème avec

String path2=request.getParameter("path1"); 

Cette méthode peut retourner null si le paramètre path1 est manquant. Si ce n'est pas null, il doit s'agir d'un chemin d'accès valide au fichier lisible auquel vous avez accès.

Lire l'exemple How to read file in Java – FileInputStream. Vous pouvez suivre la sortie avec le code.

System.out.println("Total file size to read (in bytes) : " 
       + getFileInputStream().available()); 

Le getter est nécessaire pour retourner un résultat stream et que vous utilisez le paramètre dynamique dans la configuration du résultat. Vous devez fournir le getter pour fileName.

+0

Je reçois l'exception suivante –

+0

java.lang.IllegalArgumentException: Impossible de trouver un java.io.InputStream avec le nom [inputStream] dans la pile d'invocation. Vérifiez la balise spécifiée pour cette action. –

+1

Vous devriez avoir la méthode 'getFileInputStream()'. –

0

J'ai résolu cette question. J'ai stocké le chemin physique du fichier dans la base de données. Par exemple si votre chemin de projet est: D: /Workspace_ABC/SampleProject/WebContent/D-Files/APJ.AbdulKalam.pdf puis stockez ce chemin tel qu'il est dans la table de base de données. puis utilisez ce chemin pour télécharger le fichier.