2012-08-01 4 views
5

Sto sviluppando un'applicazione, in cui le persone scaricheranno il file richiesto da una posizione indicata nel DB al loro Local. Sto usando puntone 2 per scaricare il file dal server. Posso scaricare il file senza eccezioni e funziona perfettamente. Ma il download dei file ha il nome del file che ho specificato in struts.xml, voglio che sia il nome esatto del file che sto scaricando. esempio, se il nome del file originale è struts.pdf, sto scaricando come download.pdf, come prevenirlo e scarica il file con il nome del file effettivoStruts 2 Download - Come configurare il nome del file in modo dinamico?

La mia configurazione struts.xml come segue,

<action name="download" class="action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">application/octet-stream</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="contentDisposition">attachment;filename="download.log"</param> 
      <param name="bufferSize">1024</param> 
     </result> 
     <result name="error">/live/useradminerror.jsp</result> 
    </action> 

E ho dimenticato di menzionare sto usando struts2-jquery per lo sviluppo dell'interfaccia utente. Per favore aiutatemi in questo, come sono nella fase molto critica del mio progetto.

risposta

11

se non sbaglio si vuole passare il file che viene memorizzato nel vostro DB, se questo è il caso, si può facilmente farlo passando tutti i parametri da voi class action Ti piace

class MyFileDownloadAction extends ActionSupport{ 

    private String fileName; 
    // getter and setter 

    public String fileDownload() throws exception{ 
     // file download logic 
     fileName ="abc" // can set name dynamic from DB 
    } 

} 

<action name="download" class="action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">application/octet-stream</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="contentDisposition">attachment;filename="${filename}"</param> 
      <param name="bufferSize">1024</param> 
     </result> 
     <result name="error">/live/useradminerror.jsp</result> 
    </action> 

È può passare ogni parametro dinamicamente nella classe struts.xml.Per questo ti sarà d'aiuto Questo è il modo in cui userai questo nome di file nel tuo XML

+0

Grazie per la risposta, scaricherà esattamente lo stesso nome del database. – Esh

+1

sì, poiché in questo caso si passa il nome del file in fase di esecuzione dalla classe di azioni –

+0

Grazie a Umesh, posso scaricare il file con il nome file effettivo – Esh

1

Per le annotazioni su montanti, è lo stesso. La soluzione è stata molto utile. Grazie. Il "contentType" per me non ha fatto molta differenza.

@Action(value = "/download", results = { @Result(name = "success", type = "stream", 
params= {"contentType", "application/octet-stream", "inputName","fileInputStream",  
"contentDisposition","attachment; filename=\"${fileName}\"", "bufferSize", "1024" }) 
}) 
Problemi correlati