2012-01-26 13 views
5

EPPlus 2.9 ile oynarım ve Chrome 0'ı kullanarak tek bir .xlsx dosyalarını indirmeye çalıştığımda bazı nedenlerle Duplicate headers received from server hataları alıyorum. IE9).'Sunucudan alınan yinelenen başlıklar' EPPlus 2.9 ile Chrome 16'daki Hata

Ben this tutorial kullanıyorum ve bu kod satırına sorunu dar ettik:

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

Benim kullanıcıaracısı:

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

Ben this Chrome forum page okumaya Krom sevmez virgül (,) Content-Disposition başlıklarında ve bunlar noktalı virgülle (;) değiştirilmelidir.

Herhangi bir fikri olan veya aynı hataları alan var mı?

cevap

9

Ben DateTime.Now.ToString("R") Bunu yaparak sabit Thu, 26 Jan 2012 02:05:44 GMT

üretir, aptalım:

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 huysuz olmak ve Chrome güzel oynamaya alışkınım ...

+3

Benzer bir sorunla karşılaştı. Dosya adında virgüller vardı ... Teşekkürler – NotMe

0
/// <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; 
      } 
     } 
+0

Sadece bilgi için, dosya adı çevrelerindeki tırnaklara sahip olmalıdır: "filename =" + "\" "+ exportFileName +" \ "" + ";" Firefox'ta bir hata olduğu için dosya adı tırnak içine alınmamışsa, ilk boşluktan sonra adı kesecektir. Referans http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download –

3

Aynı sorunu yaşadım ve ek olarak doğru eklendikten sonra da yarı kolon vardı. Sorunumun dosya adında virgül olduğunu gördüm. Bu yüzden onları tire ile değiştirdim.

+0

Sorun düzeltildi – Balamurugan