2009-11-05 14 views
8

Estoy tratando de hacer que sea posible para el usuario para descargar una hoja de cálculo Excel desde nuestro sitio, por tener un botón que redirigen a través de este:La descarga de un archivo a través de https en IE8, utilizando ASP.NET

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

la página aspx simplemente devuelve el archivo a través del objeto de respuesta, así:

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

Todo funciona muy bien en mi máquina, pero cuando nos estamos poniendo en el servidor, el https en combinación con no- la configuración de caché nos da un error que dice "Internet Explorer no puede descargar [blahblahblah]". La configuración de caché en la página que muestra el botón 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(); 

Cuando elimino esas líneas, todo funciona bien. Sin embargo, no puedo eliminarlos por otros motivos. Así que traté de añadir la siguiente línea al ExcelForm.aspx justo antes de que añade cosas a la cabecera:

Response.ClearHeaders(); 

Lo cual me da "Internet Explorer no puede descargar desde ExcelForm.aspx [url]". Y ahí es donde estoy atascado. Sugerencias?

Respuesta

15

Tuve un problema similar recientemente al exportar archivos CSV desde un método de controlador MVC. He encontrado que la adición:

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

resuelto el problema para mí en IE

Espero que esto ayude!

+0

ordenador dice sí! –

+0

Tienes \ o /. Trabajó como un encanto \ o/ –

3

También se enfrentó al mismo problema,

Cuando busqué en Google, he encontrado que la configuración "sin Chache" en cabecera de respuesta, es decir siguiente código es la razón del problema.

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

Algunos de los blogs se dice, para solucionar este problema, usted debe hacer algunas modificaciones en el registro de Windows en servidor web y en todas las máquinas cliente (: O), así que no es factible hacer la configuración del Registro en cada cliente máquina.

La raíz del problema es la configuración no-cache en cabecera de respuesta, por lo que sólo añadió

Response.ClearHeaders() 

antes de añadir contenido a ser descargado a la cabecera de respuesta. El código es el siguiente,

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

Ha solucionado el problema.

Enjoy !!!

+0

Voy a intentar lo que usted propone. Gracias. (Tengo el mismo problema) – ileon

+0

no te decepcionará;) :) –

0

que tenían el mismo problema exacto he podido descargar un canal secuencia binaria IE8

De acuerdo con la información de esta página, mi nuevo código es el

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

y ahora funciona como un encanto en virtud de todos los navegadores

Cuestiones relacionadas