2010-03-13 5 views
1

Dans les méthodes de téléchargement de struts2, puis-je choisir où le fichier téléchargé doit être enregistré. Je veux dire, tous les exemples sur le web me demandent de stocker dans WEB-INF ce qui n'est sûrement pas une bonne idée. Je veux être en mesure de stocker le fichier téléchargé dans n'importe quel endroit de mon disque.Téléchargement de fichier et téléchargement dans une application Web à l'aide de struts2

Comment dois-je faire? Puis-je le faire avec l'aide de l'intercepteur ServletContextAware?

Lorsque j'utilise

public class DownloadFileAction extends ActionSupport implements ServletContextAware{ 
    //private InputStream inputStream; 
    private int fileid; 
    private ServletContext servletContext; 
    private FileCrud fileCrud; 
    private MyFile myFile; 

    public FileCrud getFileCrud() { 
     return fileCrud; 
    } 
    public void setFileCrud(FileCrud fileCrud) { 
     this.fileCrud = fileCrud; 
    } 
    public MyFile getMyFile() { 
     return myFile; 
    } 
    public void setMyFile(MyFile myFile) { 
     this.myFile = myFile; 
    } 
    public InputStream getInputStream(){ 

     String homepath = "c:\\files"; 
     String fname = null; 
     try{ 
      fname=getFileCrud().getAFileName(getFileid()); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     String thePathToFile = homepath+File.separator+fname; 
     //File targetfile = new File(thePathToFile); 

     return getServletContext().getResourceAsStream(thePathToFile); 
    } 
// public void setInputStream(InputStream inputStream) { 
//  this.inputStream = inputStream; 
// } 
    public int getFileid() { 
     return fileid; 
    } 
    public void setFileid(int fileid) { 
     this.fileid = fileid; 
    } 
    public ServletContext getServletContext() { 
     return servletContext; 
    } 
    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 
    public String execute(){ 
     return SUCCESS; 
    } 

} 

et Struts fichier xml est

<action name="fileDownload" class="com.projit1.file.DownloadFileAction"> 
      <result type="stream" name="success"> 
       <param name="inputName">inputStream</param> 
       <param name="contentType">application/octet-stream</param> 

      </result> 
     </action> 

je reçois l'erreur suivante

javax.servlet.ServletException: java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action. 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) 
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) 

Je suis en train, mais je ne reçois aucun résultat .. ce est faux dans cela?

Répondre

0

Pour écrire un InputStream sur un File, vous avez besoin de FileOutputStream.

Pour obtenir un InputStream à partir d'un File, vous avez besoin de FileInputStream.

Dans votre code, vous essayez d'allouer un fichier en utilisant ServletContext#getResourceAsStream(), mais cela est destiné à allouer une ressource de chemin de classe. Remplacez-le par new FileInputStream(file).

0

Après avoir fini de l'implémenter moi-même. Je suggère de s'attaquer aux deux problèmes séparément. Faites le téléchargement des fichiers d'abord, puis les téléchargements de fichiers. Un problème immédiat avec votre support de téléchargement est que vous n'avez pas de méthode public getInputStream() pour votre configuration de résultat:

<param name="inputName">inputStream</param> 
Questions connexes