2010-10-08 7 views
7

Sto usando Response.AddHeader ("Content-Disposition", "attachment; filename =" + Server.HtmlEncode (FileName)); per aprire una finestra di dialogo 'apri/salva file' per gli utenti, in modo che possano scaricare un file sulle loro macchine locali.Response.AddHeader ("Content-Disposition") non apre il file in IE6

Questo funziona normalmente in IE7, ma su IE6 il file non si apre quando l'utente fa clic sul pulsante apri nella finestra di dialogo 'apri/salva file'. Sono passato attraverso la rete e ho trovato che Response.AddHeader ("Content-Disposition", "inline; filename =" + Server.HtmlEncode (FileName)); dovrebbe funzionare per funzionare in IE6, e funziona bene ..

Ma il problema è che la maggior parte dei file che possono aprire nel browser si apre sulla pagina stessa .. cioè l'utente su una pagina di posta e fare clic su scarica un file di immagine si apre lì, ne ho bisogno per aprire in un'altra finestra come nel caso di IE7 cosa posso fare ... altri file che non possono aprire in bowser aperto con l'applicazione corrente nel sistema cioè (word, excel ecc.)

si prega di suggerire un metodo di attaccare con lo stesso codice per entrambi IE ... il codice che ho usato è qui ....

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

Perché codifica HTML il nome file? Le intestazioni HTTP non sono HTML. – spender

+0

yh itz un errore l'ho rimosso ma non risolve il problema .. – deepu

+1

ho ottenuto la mia soluzione da parte della tua domanda grazie :) – bhargav

risposta

13

ho trovato il problema in IE 6 dobbiamo leggere i buffer di contenuti e di utilizzo e di scrittura binaria di aprire file in IE 6 ,, il codice qui sotto funziona bene per me in 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

avendo lo stesso problema il suo non aprire .. – solairaja

1

Prova questa impostazione del conte nt tipo di ottetto flusso:

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

ho usato quello .... – deepu