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