2009-11-05 18 views
8

Sto cercando di rendere possibile per l'utente di scaricare un foglio di calcolo di Excel dal nostro sito, di avere un pulsante che reindirizza attraverso questo:download di un file tramite HTTPS in IE8, utilizzando ASP.NET

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

la pagina aspx invia appena tornato il file tramite l'oggetto Response, in questo modo:

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

Tutto funziona bene sulla mia macchina, ma quando stiamo mettendo sul server, i https in combinazione con no- le impostazioni della cache ci danno un errore che dice "Internet Explorer non può scaricare [blahblahblah]". Le impostazioni della cache nella pagina che mostrano il pulsante 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(); 

Quando rimuovo quelle linee, tutto funziona perfettamente. Tuttavia, non sono autorizzato a rimuoverli per altri motivi. Così ho provato ad aggiungere la seguente riga al ExcelForm.aspx appena prima che aggiunge roba per l'intestazione:

Response.ClearHeaders(); 

che dà solo a me "Internet Explorer non può scaricare ExcelForm.aspx da [url]". Ed è lì che sono bloccato. Suggerimenti?

risposta

15

Ho avuto un problema simile di recente durante l'esportazione di file CSV da un metodo controller MVC. Ho trovato che l'aggiunta di:

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

risolto il problema per me in IE

Spero che questo aiuti!

+0

computer dice sì! –

+0

Possedere \ o /. Ha funzionato come un fascino \ o/ –

3

Ho anche affrontato lo stesso problema,

Quando ho cercato su google, ho trovato che le impostazioni di "no" in Chache intestazione di risposta vale a dire codice seguente è il motivo per il rilascio.

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

alcuni dei blog dice, per risolvere questo problema, si dovrebbe fare qualche modifica nel registro di Windows sul Webserver e su tutte le macchine client (: O), così non è possibile fare impostazioni di registro su ogni client macchina.

La causa principale è impostazioni non-cache di intestazione di risposta, quindi aggiunto

Response.ClearHeaders() 

prima di aggiungere contenuti da scaricare all'intestazione di risposta. Il codice è come mostrato di seguito,

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

Ha risolto il problema.

Divertiti !!!

+0

proverò ciò che proponi. Grazie. (Ho lo stesso problema) – ileon

+0

non rimarrete delusi;) :) –

0

Ho avuto lo stesso problema esatto ero in grado di scaricare un file binario flusso attraverso IE8

Secondo le informazioni in questa pagina, il mio nuovo codice è simile

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

e ora funziona come un fascino in tutti i browser

Problemi correlati