2012-08-01 15 views
5

Estoy desarrollando una aplicación, donde las personas descargarán el archivo requerido de una ubicación mencionada en el DB a su Local. Estoy utilizando struts 2 para descargar el archivo del servidor. Puedo descargar el archivo sin excepción y funciona perfectamente. Pero los archivos que descargo tienen el nombre de archivo que especifiqué en struts.xml, quiero que sea el nombre de archivo exacto que estoy descargando. ejemplo, si el nombre del archivo original es struts.pdf, estoy descargando como Download.pdf, cómo prevenirlo y descargar el archivo con el nombre de archivo realStruts 2. ¿Cómo configurar el nombre de archivo dinámicamente?

Mi configuración struts.xml de la siguiente manera,

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

Y olvidé mencionar que estoy usando struts2-jquery para desarrollar la interfaz de usuario. Por favor, ayúdenme en esto, ya que estoy en una etapa muy crítica de mi proyecto.

Respuesta

11

si no me equivoco desea pasar el archivo que está siendo almacenada en su base de datos, si este es el caso, puede hacerlo fácilmente haciendo pasar todos esos parámetros de usted la clase de acción como

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> 

Usted puede pasar cada parámetro dinámicamente en su clase struts.xml. Espero que esto lo ayude Así es como usará este nombre de archivo en su XML

+0

Gracias por la respuesta, ¿descargará exactamente el mismo nombre que en la base de datos? – Esh

+1

sí lo hará, ya que en este caso está pasando el nombre de archivo en tiempo de ejecución de su clase de acción –

+0

Gracias Umesh, puedo descargar el archivo con el nombre de archivo real – Esh

1

Para anotaciones en struts, lo mismo. La solución fue muy útil. Gracias. El "contentType" para mí no hizo mucha diferencia.

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