2009-11-05 13 views
8

Próbuję umożliwić użytkownikowi pobranie arkusza kalkulacyjnego Excel z naszej strony, poprzez przycisk, który przekierowuje przez to:Pobieranie plików za pośrednictwem protokołu HTTPS w IE8 przy użyciu ASP.NET

Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName)); 

strona aspx tylko odsyła plik za pośrednictwem obiektu Response, tak:

Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay); 
Response.WriteFile(Server.MapPath(pathName + fileNameUnique)); 
Response.Flush(); 
Response.End(); 

Wszystko działa dobrze na moim komputerze, ale gdy jesteśmy wprowadzenie go na serwerze, https w połączeniu z no- ustawienia pamięci podręcznej dają nam komunikat "Internet Explorer nie może pobrać [blahblahblah]". Ustawienia pamięci podręcznej na stronie wyświetlającej przycisk programu Excel:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Expires = 0; 
HttpContext.Current.Response.AddHeader("Pragma", "no-cache"); 
HttpContext.Current.Response.AddHeader("cache-control", "private, no-cache, must-revalidate no-store pre-check=0 post-check=0 max-stale=0"); 
HttpContext.Current.Response.Cache.SetNoServerCaching(); 

Po usunięciu tych linii wszystko działa dobrze. Jednak nie wolno mi ich usuwać z innych powodów. Więc próbowałem dodając następującą linię do ExcelForm.aspx tuż przed dodaje rzeczy do nagłówka:

Response.ClearHeaders(); 

który właśnie daje mi „Internet Explorer nie może pobrać ExcelForm.aspx z [url]”. I właśnie tam utknąłem. Propozycje?

Odpowiedz

15

Ja sam miałem podobny problem podczas eksportowania plików CSV z metody kontrolera MVC. Okazało się, że dodając:

 Response.ClearHeaders(); 
     Response.Clear(); 

rozwiązał problem dla mnie w IE

nadzieję, że to pomaga!

+0

komputer mówi tak! –

+0

Jesteś właścicielem \ o /. Pracowałam jak czar \ o/ –

3

również w obliczu tego samego problemu,

Kiedy google, znalazłem, że ustawienia „nie chache” w nagłówku odpowiedzi tj następujący kod jest przyczyną problemu.

Response.AppendHeader("Pragma", "no-cache") 
Response.AppendHeader("Cache-Control", "no-cache") 
Response.AppendHeader("max-age", "0") 

Niektóre blogi mówi, aby rozwiązać ten problem, należy zrobić kilka zmian w rejestrze systemu Windows na serwer WWW i na wszystkich komputerach klienckich (: O), a to nie jest wykonalne ustawień rejestru na każdym kliencie maszyna.

Przyczyną jest ustawienia no-cache w nagłówku odpowiedzi, więc po prostu dodaje

Response.ClearHeaders() 

przed dodaniem zawartości do pobrania z nagłówka odpowiedzi. Kod jest przedstawiony poniżej:

Response.ClearHeaders() 
Response.ContentType = "application/ms-excel" 
Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") 
Response.BinaryWrite(fileBytes) 
Response.End() 

Naprawiono problem.

Ciesz się !!!

+0

Spróbuję tego, co zaproponujesz. Dziękuję Ci. (Mam ten sam problem) – ileon

+0

nie będziesz rozczarowany;) :) –

0

miałem dokładnie ten sam problem, nie udało mi się ściągnąć binarnego strumienia koryta IE8

Według informacji na tej stronie, mój nowy kod wygląda

  • Response.ClearHeaders();
  • Response.ContentType = "application/octet-stream";
  • Odpowiedź.AppendHeader ("content-disposition", string.Format ("attachment; filename = {0}", "nameofthefile.exe"));
  • Response.BinaryWrite (bytes);
  • Response.End();

i teraz działa jak czar pod wszystkimi przeglądarkami

Powiązane problemy