'从服务器收到的重复标题'在带有EPPlus 2.9的Chrome 16中出错

我正在玩EPPlus 2.9 ,由于某种原因,当我尝试使用Chrome 16下载单个.xlsx文件(在IE9中正常工作)时,我Duplicate headers received from server错误中收到的Duplicate headers received from server文件。

我正在使用这个教程 ,我已经缩小了这个问题的代码行:

  Response.AppendHeader("Content-Disposition", "attachment; " + "filename=\"ExcelReport.xlsx\"; " + "size=" + fileBytes.Length.ToString() + "; " + "creation-date=" + DateTime.Now.ToString("R") + "; " + "modification-date=" + DateTime.Now.ToString("R") + "; " + "read-date=" + DateTime.Now.ToString("R")); 

我的使用者:

 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7 

我在这个Chrome论坛页面上看到,Chrome不喜欢逗号( , )在Content-Disposition标题中,并且应该用分号( ; )replace。

有人有任何想法或获得相同的错误?

我很笨, DateTime.Now.ToString("R")产生Thu, 26 Jan 2012 02:05:44 GMT

我通过这样做来修复它:

 String timestamp_without_commas = DateTime.Now.ToString("R").Replace(",",""); Response.AppendHeader("Content-Disposition", "attachment; " + "filename=\"ExcelReport.xlsx\"; " + "size=" + fileBytes.Length.ToString() + "; " + "creation-date=" + timestamp_without_commas + "; " + "modification-date=" + timestamp_without_commas + "; " + "read-date=" + timestamp_without_commas); 

我习惯了IE浏览器被胡思乱想和Chrome播放不错…

我有同样的问题,并正确附加后,我也有分号。 我发现我的问题是在文件名中有逗号。 所以我用破折号取代了它们。

  /// <summary> /// ExportToExcel is a method used for Export To Excel with template file. /// /// </summary> /// <param name="templateFile">The fully qualified name of the new file, or the relative file name. Do not end the path with the directory separator character.</param> /// <param name="dt">Datatable for export.</param> /// <param name="printHeaders">Datatable's header used or not, when Export it. </param> /// <param name="exportFileName">provide fileName only not path. </param> /// <param name="Response">System.Web.HttpResponse. </param> /// <param name="sheetNames">arg[0] means provide sheet name where you want to load data. \n (Optional Parameter) arg[1] means provide sheet name where you want to edit. (Optional Parameter) arg[2] means if your intention is to Edit sheet so provide searchText.</param> /// public static string ExportToExcel(FileInfo templateFile, DataTable dt, bool printHeaders, string exportFileName, System.Web.HttpResponse Response, params String[] sheetNames) { try { using (ExcelPackage p = new ExcelPackage(templateFile, false)) { EPPlus.AddSheetWithTemplate(p, dt, sheetNames[0], printHeaders); String[] clientName = exportFileName.Split(new char[] { '_' }, 2); if (sheetNames.Count() > 2) { ExcelPackagePlusLibrary.EPPlus.EditSheet(p, sheetNames[1], sheetNames[2], clientName[0] ?? exportFileName); } Byte[] fileBytes = p.GetAsByteArray(); //Read the Excel file in a byte array //Clear the response Response.ClearHeaders(); Response.ClearContent(); Response.Clear(); //Response.Cookies.Clear(); //Add the header & other information //Response.Cache.SetCacheability(System.Web.HttpCacheability.Private); //Response.CacheControl = "private"; //Response.Charset = System.Text.UTF8Encoding.UTF8.WebName; //Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; //Response.AppendHeader("Content-Length", fileBytes.Length.ToString()); //Response.AppendHeader("Pragma", "cache"); //Response.AppendHeader("Expires", "60"); Response.AddHeader("Content-Disposition", "attachment; " + "filename=" + exportFileName + "; " + "size=" + fileBytes.Length.ToString() + "; " + "creation-date=" + DateTime.Now.ToString("R").Replace(",", "") + "; " + "modification-date=" + DateTime.Now.ToString("R").Replace(",", "") + "; " + "read-date=" + DateTime.Now.ToString("R").Replace(",", "")); //Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.ContentType = "application/x-msexcel"; //Write it back to the client Response.BinaryWrite(fileBytes); Response.Flush(); Response.Close(); /* Download to Client Side. */ //DirectoryInfo dir = new DirectoryInfo(Server.MapPath("~/Testing/Downloaded/" + DateTime.Now.ToString("MM-dd-yyyy"))); //if (!dir.Exists) //{ // dir.Create(); //} //File.WriteAllBytes(dir.FullName + "\\" + fileName, fileBytes); return String.Empty; } } catch (Exception ex) { _ErrorMessage = ex.Message.ToString(); return _ErrorMessage; } }