«Повторяющиеся заголовки, полученные от сервера» Ошибка в Chrome 16 с EPPlus 2.9 - PullRequest
5 голосов
/ 26 января 2012

Я играю с EPPlus 2.9 и по какой-то причине я получаю Duplicate headers received from server ошибки при попытке загрузить отдельные .xlsx файлы с помощью Chrome 16 (он отлично работает в IE9).

Я использую этот учебник , и я сузил проблему до этой строки кода:

        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, и их следует заменить точками с запятой (;).

У кого-нибудь есть идеи или такие же ошибки?

Ответы [ 3 ]

9 голосов
/ 26 января 2012

Я тупой, 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 неплохо играет...

3 голосов
/ 15 января 2013

У меня была такая же проблема, и у меня также была правильная точка с запятой после вложения.Я обнаружил, что у моей проблемы были запятые в имени файла.Поэтому я заменил их тире.

0 голосов
/ 24 августа 2012
 /// <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;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...