2010-10-08 21 views
7

Estoy usando Response.AddHeader ("Content-Disposition", "attachment; filename =" + Server.HtmlEncode (FileName)); para abrir un cuadro de diálogo 'abrir/guardar archivo' para los usuarios, para que puedan descargar un archivo en sus máquinas locales.Response.AddHeader ("Content-Disposition") no abre el archivo en IE6

Esto funciona bien normalmente en IE7, pero en IE6 el archivo no se abre cuando el usuario hace clic en el botón Abrir en el cuadro de diálogo 'abrir/guardar archivo'. Revisé la red y encontré que Response.AddHeader ("Content-Disposition", "inline; filename =" + Server.HtmlEncode (FileName)); debe proporcionar a trabajar que en IE6, y sus obras de bien ..

Pero la cuestión es la mayor parte de los archivos que se pueden abrir en el navegador se abre en la propia página .. es decir usuario en una página de correo y haga clic en Descargar una archivo de imagen se abre allí ,, lo necesito abrir en otra ventana como en el caso de IE7 ¿qué puedo hacer ... otros archivos que no se pueden abrir en bowser abierto con la aplicación actual en el sistema es decir (palabra, excel, etc.)

favor sugerir un método para seguir con mismo código para ambos IE ... el código que utiliza es aquí ....

Response.AddHeader("Content-Disposition", "attachment; filename=" +FileName); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = ReturnExtension(file.Extension.ToLower()); 
Response.TransmitFile(file.FullName); 
Response.End(); 

private string ReturnExtension(string fileExtension) 
    { 
     switch (fileExtension) 
     { 
      case ".txt": 
       return "text/plain"; 
      case ".doc": 
       return "application/ms-word"; 
      case ".xls": 
       return "application/vnd.ms-excel"; 
      case ".gif": 
       return "image/gif"; 
      case ".jpg": 
      case "jpeg": 
       return "image/jpeg"; 
      case ".bmp": 
       return "image/bmp"; 
      case ".wav": 
       return "audio/wav"; 
      case ".ppt": 
       return "application/mspowerpoint"; 
      case ".dwg": 
       return "image/vnd.dwg"; 
      default: 
       return "application/octet-stream"; 
     } 
    } 
+1

¿Por qué está HTML codificando el nombre de archivo? Los encabezados HTTP no son HTML. – spender

+0

yh itz un error lo he quitado pero no resuelve el problema .. – deepu

+1

tengo mi solución de parte de su pregunta gracias :) – bhargav

Respuesta

13

he encontrado el problema en IE 6 tenemos que leer las memorias intermedias de contenido y uso y escritura binaria para abrir el archivo en el IE 6 ,, el siguiente código funciona bien para mí en IE6

FileStream sourceFile = new FileStream(Server.MapPath(@"FileName"), FileMode.Open); 
float FileSize; 
FileSize = sourceFile.Length; 
byte[] getContent = new byte[(int)FileSize]; 
sourceFile.Read(getContent, 0, (int)sourceFile.Length); 
sourceFile.Close(); 
Response.ClearContent(); 
Response.ClearHeaders(); 
Response.Buffer = true; 
Response.ContentType = ReturnExtension(file.Extension.ToLower()); 
Response.AddHeader("Content-Length", getContent.Length.ToString()); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName); 
Response.BinaryWrite(getContent); 
Response.Flush(); 
Response.End(); 
+0

teniendo el mismo problema no está abriendo .. – solairaja

1

probar este ajuste del conte nt tipo de tren de octetos:

Response.ContentType = "application/octet-stream"; 
+0

he usado eso .... – deepu

Cuestiones relacionadas