Frage

Ich spiele mit herum EPPlus 2,9 und aus irgendeinem Grund bekomme ich Duplicate headers received from server fehler beim Versuch, Single herunterzuladen .xlsx dateien mit Chrome 16 (Es funktioniert gut in IE9).

Ich benutze dieses Tutorial und ich habe das Problem auf diese Codezeile eingegrenzt:

        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"));

Mein Useragent:

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

Ich lese weiter diese Chrome Forum Seite dass Chrome keine Kommas mag (,) in Content-Disposition header und sie sollten durch Semikolons ersetzt werden (;).

Hat jemand irgendwelche Ideen oder die gleichen Fehler?

War es hilfreich?

Lösung

Ich bin dumm, DateTime.Now.ToString("R") produzieren Thu, 26 Jan 2012 02:05:44 GMT

Ich habe es dadurch behoben:

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);

Ich bin es gewohnt, dass IE launisch ist und Chrome gut spielt...

Andere Tipps

Ich hatte das gleiche Problem und ich hatte auch das Semikolon nach dem Anhängen korrekt.Ich stellte fest, dass mein Problem Kommas im Dateinamen enthielt.Also habe ich sie durch Bindestriche ersetzt.

 /// <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;
            }
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top