2010-10-08 7 views
7

Używam Response.AddHeader ("Content-Disposition", "attachment; filename =" + Server.HtmlEncode (FileName)); aby otworzyć okno dialogowe "Otwórz/Zapisz plik" dla użytkowników, aby mogli pobrać plik na swoje maszyny lokalne.Response.AddHeader ("Content-Disposition") nie otwiera pliku w IE6

Działa to dobrze normalnie w IE7, ale na IE6 plik nie otwiera się, gdy użytkownik kliknie przycisk otwierania w oknie dialogowym "Otwórz/zapisz plik". Przeszedłem przez sieć i odkryłem, że Response.AddHeader ("Content-Disposition", "inline; filename =" + Server.HtmlEncode (FileName)); powinien być dostarczony do pracy w IE6, a jego prace dobrze ..

Ale problem jest większość plików, które można otworzyć w przeglądarce otwiera się na samej stronie .. tj. Użytkownik na stronie poczty i kliknij przycisk Pobierz plik obrazu otwiera się tam, muszę go otworzyć w innym oknie, jak w przypadku IE7, co mogę zrobić ... inne pliki, które nie mogą otworzyć się w bowser open z aktualną aplikacją w systemie ie (word, excel itp.) ..

proszę sugerują sposób, aby trzymać z tym samym kodem dla obu IES ... Kodeks użyłem tu ....

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

Dlaczego kodujesz nazwę pliku HTML? Nagłówki HTTP nie są HTML. – spender

+0

yh itz pomyłka usunąłem go, ale to nie rozwiązuje problemu .. – deepu

+1

Mam moje rozwiązanie z części twojego pytania dzięki :) – bhargav

Odpowiedz

13

znalazłem problem w IE 6, musimy odczytać zawartość i używać bufory i zapisu binarnego, aby otworzyć plik w IE 6 ,, poniższy kod działa dobrze dla mnie w 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

mając ten sam problem z jego otwarciem .. – solairaja

1

Spróbuj ustawienie Conte Typ nt do strumienia oktetu:

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

użyłem tego ... – deepu