2016-09-09 2 views
0

У меня есть требование для экспорта 2 csv файлов при нажатии одной кнопки. Ниже приведено код для создания 2 CSV файлов:Err_Response_Headers_Multiple_Content_Disposition

using System.Data; 
using System.Data.SqlClient; 
using System.Text; 
using System.IO; 
using System; 
using System.Configuration; 
using System.IO.Packaging; 
using System.Web; 

namespace ExportToCsv 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     //Build the CSV file data as a Comma separated string. 
     string csvHeader = string.Empty; 
     //Build the CSV file data as a Comma separated string. 
     string csvDetails = string.Empty;  

     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void ExportCSV(object sender, EventArgs e) 
     { 
      string constr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(constr)) 
      { 
       using (SqlCommand cmd = new SqlCommand("select * from mytable-1") 
       { 
        using (SqlDataAdapter sda = new SqlDataAdapter()) 
        { 
         cmd.Connection = con; 
         sda.SelectCommand = cmd; 
         using (DataTable dt = new DataTable()) 
         { 
          sda.Fill(dt); 


          //foreach (DataRow rows in dt.Rows) 
          //{ 
           foreach (DataColumn column in dt.Columns) 
           { 
            //Add the Header row for CSV file. 
            csvHeader += column.ColumnName + ' '; 
           } 


           //Add new line. 
           csvHeader += "\r\n"; 

           foreach (DataRow row in dt.Rows) 
           { 
            foreach (DataColumn column in dt.Columns) 
            { 
             //Add the Data rows. 
             csvHeader += row[column.ColumnName].ToString().Replace(",", ";") + ' '; 
            } 

            //Add new line. 
            csvHeader += "\r\n"; 
           } 
          //} 

           Response.Clear(); 
           Response.Buffer = true; 
           Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt"); 
           Response.Charset = ""; 
           Response.ContentType = "application/text"; 
           Response.Output.Write(csvHeader);              
         } 
        }    
       } 

       using (SqlCommand cmd = new SqlCommand("select * from mytable-2") 
       { 
        using (SqlDataAdapter sda = new SqlDataAdapter()) 
        { 
         cmd.Connection = con; 
         sda.SelectCommand = cmd; 
         using (DataTable dt = new DataTable()) 
         { 
          sda.Fill(dt); 


          //foreach (DataRow rows in dt.Rows) 
          //{ 
          foreach (DataColumn column in dt.Columns) 
          { 
           //Add the Header row for CSV file. 
           csvDetails += column.ColumnName + ' '; 
          } 


          //Add new line. 
          csvDetails += "\r\n"; 

          foreach (DataRow row in dt.Rows) 
          { 
           foreach (DataColumn column in dt.Columns) 
           { 
            //Add the Data rows. 
            csvDetails += row[column.ColumnName].ToString().Replace(",", ";") + ' '; 
           } 

           //Add new line. 
           csvDetails += "\r\n"; 
          } 
          //} 

          // Download the CSV file. 
          Response.Clear(); 
          Response.Buffer = true; 
          Response.AddHeader("content-disposition", "attachment;filename=DetailSection.txt"); 
          Response.Charset = ""; 
          Response.ContentType = "application/text"; 
          Response.Output.Write(csvDetails); 
          Response.Flush(); 
          Response.End(); 
         } 
        } 
       } 
      } 

     }  
    } 
} 

Я получаю данные из 2-х разных таблиц и экспортировать данные в формате CSV отдельно. Если удалить второй using о функции работает префекта, но, как я добавил второй using заявление писать второй Csv мой браузер (Chrome ) дает ошибку Err_Response_Headers_Multiple_Content_Disposition

Пожалуйста, помогите. Заранее спасибо.

ответ

0

Вы не можете этого сделать, потому что HTTP не поддерживает его. Что вы можете сделать, это объединить оба файла в один файл (например, ZIP-файл) и отправить его клиенту.

+0

Возможно ли ZIP-файлы, используя мой код. Значит я создаю файлы на лету, и я хочу добавить их в ZIP, а затем загрузить в систему. Я прочитал много статей по ZIP, и все они указали путь к файлу, чтобы добавить файлы в ZIP. В моем случае у меня нет пути. –

-1

Я решил с этой статьей

Эта ошибка была подслушивания меня всю прошлую неделю. Эта ошибка относится к Google Chrome. Не ошибка в самом хроме, хотя, поскольку другие браузеры игнорируют дублированные заголовки, это похоже на проблему с Chrome. Это можно легко решить следующими способами, если вы или ваше веб-приложение отправляют заголовки.

1 - Заполнить имя файла, используя "". i.e

header ('Content-Disposition: attachment; filename = "'. $ file_name. '"');

вместо

заголовка ('Content-Disposition: привязанностью; имя файла =' $ имя_файла.);

2 - Если возможно заменить пробелы и запятые (,) с подчеркивания (_)

$ имя_файла = str_replace (array ('"' "'", '',', '), '_' , $ file_name);

3 - Явное сказать PHP переопределять заголовки, установив опциональный заменить параметр истина

заголовок ('Content-Type: применение/PDF', TRUE);

Fix for Duplicate Headers Error 349

.