Pregunta

Me he encontrado con un problema en el que IE no abre el cuadro de diálogo Guardar como / Abrir para un documento de Excel como lo hace Firefox.

Así que he creado un filtro de servlet que usa '* .xls' como patrón de url. El problema que ahora enfrento (ya que este es el primer filtro que he creado) es cómo obtener el nombre del archivo que el usuario desea para que el cuadro de diálogo se llene correctamente. Actualmente, el filtro se invoca cuando el usuario selecciona un enlace en una página determinada.

Esto es lo que se me ocurrió:

Lo anterior es lo que tengo doFilter ().

String fileName = "fileName.xls";

HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
String requestURI = httpRequest.getRequestURI();

if(StringUtils.isNotBlank(requestURI))
{
  String uri[] = StringUtils.split(requestURI, '/');
  fileName = uri[uri.length - 1];
}

HttpServletResponse httpResponse = (HttpServletResponse) pResponse;
httpResponse.setContentType("application/vnd.ms-excel");
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"");

web.xml:

<filter>
    <filter-name>ExcelFilter</filter-name>
    <filter-class>vsg.rp.common.ExcelFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExcelFilter</filter-name>
    <url-pattern>*.xls</url-pattern>
</filter-mapping>

Todo esto está funcionando en mi caja de desarrollo: Windows XP, JBoss, Eclipse, Oracle. Pero cuando se ejecuta en el servidor de prueba & # 8212; Linux, Apache / JBoss, Oracle & # 8212; no funciona. Parece que el filtro ni siquiera se llama, no se producen errores, etc. ¿Alguna idea de por qué sucedería esto?

¿Fue útil?

Solución

Desea que el tipo de contenido se configure correctamente, así como el encabezado de disposición del contenido, por lo tanto:

  

response.setContentType (" application / vnd.ms-excel ");
  response.setHeader (" Content-Disposition " ;,   " adjunto; nombre de archivo = \ " " + nombre de archivo +   " \ " ");

Otros consejos

Utilice el encabezado HTTP Content-Disposition y configúrelo en algo como:

attachment; filename=myworkbook.xls

El es un Artículo de Microsoft Knowledge Base sobre este problema. Y aquí hay un ejemplo de configuración de Content-Disposition en código Java .

Además de configurar los encabezados para el tipo de contenido, también querrás asegurarte de que el servidor NO le diga al navegador que NO CACHE el archivo.

En IE Land, si le dice a IE que no guarde en caché el archivo, felizmente descarga el archivo ... luego intenta abrir el archivo desde el directorio donde guardó el archivo ... Sin embargo, dado que los encabezados decían "don" no caché " toma esto literalmente, y no guarda el archivo, por lo que Excel arroja un error que dice "¡No hay archivo! " ;.

En pocas palabras, diga a IE que CACHE el archivo .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top