2009-08-13 10 views
7

Tengo una página aspx con botones link que activan Javascript para abrir una nueva página aspx para transmitir archivos al navegador y descargarlos por los usuarios.IE 7 error? - prompt save/open when downloading file - C# asp.net 3.5

Al desarrollar y probar unidades en XP SP3, IE 7 y FireFox 3.5, utilizando el siguiente código (la clave es la parte "adjunto" en la etiqueta Content-Disposition), ambos solicitan un cuadro de diálogo que pregunte si deseo guardar o abra el documento, que es exactamente lo que quiero que suceda:

 private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format); 
     Response.ContentType = m_mimeType; 
     Response.BinaryWrite(requestFile); 
     Response.Flush(); 

    } 

Cuando despliego a un servidor Windows 2003 y vaya a la misma página aspx, Firefox 3.5 se pregunta correctamente para una opción de Guardar/abrir como se esperaba ya que esa es la operación predeterminada en FF.

Cuando navego en IE 7 sin embargo y hago clic para descargar, obtengo una ventana emergente que es visible por 1/8 segundos de segundo ... y desaparece. Sin aviso para Guardar/Abrir.

si entro en el IE 7 -> Herramientas -> Opciones de Internet -> Seguridad -> Nivel personalizado -> Descargas

Preguntar automáticamente si se debe descargar un archivo está desactivado. Cuando lo compruebo para habilitarlo, consigo que el mensaje Guardar/Abrir funcione correctamente.

Así que mi pregunta es ... ¿Alguien ha conseguido un trabajo en torno a esto? He intentado un montón de cosas que la gente afirma trabajar con diferentes etiquetas de encabezado, como caché, pragma, etc., etc. Nada de eso evita el hecho de que IE tiene la propiedad de descarga deshabilitada de forma predeterminada.

+0

He intentado algo similar y funciona en IE7,8. ¿Puedes proporcionar el valor exacto del m_mimeType que usas? –

+0

para las pruebas im usando esto como el mimo y el formato de la lista de parámetros "application/pdf", "PDF" –

+0

que ensaye por ejemplo demás application/zip Algo que IE7 no puede mostrar dentro de su ventana. –

Respuesta

2

Nos encontramos con un problema idéntico recientemente con nuestra implementación para descargar informes generados en nuestro marco web personalizado. Las investigaciones nos llevaron a probar el mismo enfoque que usted mencionó (establecer Contenido-Disposición).

El problema está relacionado con IE7 y las zonas de seguridad. Por defecto, ciertas acciones DEBEN ser iniciadas explícitamente por el usuario. Puede comenzar mirando Understanding and Working in Protected Mode Internet Explorer y About Window Restrictions

0

No relacionado con este problema, pero debe citar el nombre del archivo en su salida. Los espacios en el nombre del archivo arruinarán el nombre del archivo al descargar el archivo.

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\""); 
0

Pruebe este

protegido (remitente objeto, EventArgs e) void Button1_Click { Response.ContentType = "application/pdf"; Response.Clear(); Response.TransmitFile ("test.pdf"); Response.End(); }

+0

Si ves en mi ejemplo, el archivo no es del sistema de archivos, es una matriz de bytes im usando BinaryWrite() para escribir en el navegador. TransmitFile() no funcionará en este caso a menos que ensamble los archivos físicamente en el sistema. –

1

Si agrega su página a los sitios de confianza, podrá descargar el archivo. Al desarrollar todos sus sitios que está ejecutando, se encuentran en esta zona.

Usted puede tratar de forzar el Internet Explorer añadiendo

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

hasta el final de su solicitud.

Si no, puede tratar de publicar el enlace al documento, por lo que el navegador ve la solicitud como una respuesta de la interacción del usuario.

0

Si no es una necesidad que una nueva página se abre utilizando JavaScript, puede utilizar un Response.Redirect() a la página aspx. Esto debería abrir el diálogo guardar/abrir.