2016-05-04 24 views
2

gespeichert ist Dies ist meine Strut-Datei.Ich möchte eine PDF-Datei herunterladen, die in dem Ordner in WebContent des Projekts

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

und dies ist Aktionscode in dem das Objekt der Datei wird null bekommen.

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

Ich habe die Datei gespeichert, die ich im Web-Content-Ordner herunterladen möchten, und ich habe den Weg der es in der Datenbank gespeichert. Ich weiß nicht, was das Problem ist.

Antwort

1

Das Problem mit

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

Diese Methode null, wenn der Parameter path1 fehlt zurückkehren. Wenn es nicht null ist, dann sollte es ein gültiger Pfad zu der lesbaren Datei, die Sie Zugriff auf Anwendungen haben.

Lesen Sie das Beispiel How to read file in Java – FileInputStream. Sie können die Ausgabe mit dem Code verfolgen.

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

Der Getter wird benötigt, um ein stream Ergebnis zurückzukehren, und wie Sie dynamische Parameter in der Konfiguration verwenden. Sie sollten den Getter für fileName bereitstellen.

+0

Ich bekomme folgende Ausnahme –

+0

java.lang.IllegalArgumentException: Kann einen java.io.InputStream mit dem Namen [inputStream] im Aufrufstapel nicht finden. Überprüfen Sie das für diese Aktion angegebene -Tag. –

+1

Sie sollten 'getFileInputStream()' Methode haben. –

0

Ich habe diese Frage gelöst. Ich habe den physischen Pfad der Datei in dem Daten base.For Beispiel gespeichert, wenn Ihr Projektpfad ist: D: /Workspace_ABC/SampleProject/WebContent/D-Files/APJ.AbdulKalam.pdf dann diesen Pfad speichern, wie es in der die Datenbanktabelle. und dann diesen Pfad verwenden, um die Datei herunterzuladen.