EPPlus 2.9 を使用した Chrome 16 での「サーバーから受信した重複ヘッダー」エラー

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

質問

で遊んでます EPプラス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 ヘッダーはセミコロン (;).

何かアイデアを思いついた人、または同じエラーが発生した人はいますか?

役に立ちましたか?

解決

私はダムです、 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