خطأ "تم تلقي رؤوس مكررة من الخادم" في Chrome 16 مع EPPlus 2.9

StackOverflow https://stackoverflow.com/questions/9014860

سؤال

أنا ألعب مع ايب بلس 2.9 ولسبب ما أحصل عليه Duplicate headers received from server أخطاء عندما أحاول تنزيل Single .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 الرؤوس ويجب استبدالها بفواصل منقوطة (;).

هل لدى أي شخص أي أفكار أو الحصول على نفس الأخطاء؟

هل كانت مفيدة؟

المحلول

أنا غبي، 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;
            }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top