Descargar un fichero de una BD con Struts2

Bueno, parece que en a descarga de ficheros tenía problemas con el IE7, así que tuvimos que reformarla, y aprovecho para contaros un poco la experiencia.

Lo primero, usar el resultado “stream” que nos proporciona struts… de manera que la configuración de la acción queda:

<action name=“download” class=“es.uva.aplicaciones.download.struts2.DownloadAdjunto”>

<result name=“success” type=“stream”>

<param name=“contentType”>application/msword</param>

<param name=“inputName”>inputStream</param>

<param name=“contentDisposition”>filename=”PLBValladolid.doc”</param>

<param name=“bufferSize”>1024</param>

</result>

<result name=“error”>/error.jsp</result>

</action>

La clase debe tener el método getInputStream o el correspondiente a la variable InputName que hemos puesto en el struts.xml. En el método execute es donde debemos cargar el fichero de la base de datos y asignarle al inputStream. En mi caso es coger un tipo blob de MySql a través de hibernate.


private InputStream inputStream=null;

public InputStream getInputStream() {
return inputStream;
}

public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}

public String execute() {
HttpServletRequest request = (HttpServletRequest) ServletActionContext
.getRequest();
HttpServletResponse response = (HttpServletResponse) ServletActionContext
.getResponse();

if (request.getParameter(“id”) != null) {
String id = request.getParameter(“id”);
file = dao.findAdjunto(id);
} else {
// ERROR: id no encontrado
addActionError(rb.getString(“errors.sinparametro”));
return ERROR;
}
if (file != null) {
response.setContentType(file.getTipo());
response.setContentLength(file.getSize().intValue());
response.setHeader(“Content-Disposition”,”inline; document.fileName=” + file.getNombre() + “”);
response.setHeader(“Cache-Control”,”must-revalidate, post-check=0, pre-check=0″);
response.setHeader(“Pragma”, “public”);
response.setDateHeader(“Expires”, 0);

Blob blob = file.getDatos();
try {
this.setInputStream(blob.getBinaryStream());
} catch (Exception e) {
System.err.println(e);
addActionError(rb.getString(“errors.escrituraencliente”));
return ERROR;
}
return SUCCESS;
} else {
//Fichero no encontrado
addActionError(rb.getString(“errors.ficheronoencontrado”));
return ERROR;
}
}

webmaster

Grupo web de la Universidad de Valladolid - STIC

One thought to “Descargar un fichero de una BD con Struts2”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *