Err_Response_Headers_Multiple_Content_Disposition
Posted
技术标签:
【中文标题】Err_Response_Headers_Multiple_Content_Disposition【英文标题】: 【发布时间】:2017-01-17 05:07:28 【问题描述】:我需要通过单击一次按钮导出 2 个 csv 文件。下面是我生成 2 个 csv 文件的代码:
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)会给出错误
请帮忙。提前致谢。
【问题讨论】:
【参考方案1】:您不能这样做,因为 HTTP 不支持它。您可以做的是将两个文件捆绑到一个文件中(例如 ZIP 文件)并将其发送给客户端。
【讨论】:
是否可以使用我发布的代码压缩文件。意味着我正在动态生成文件,我想将它们添加到 ZIP 中,然后在系统中下载。我阅读了很多关于 ZIP 的文章,并且都指定了在 ZIP 中添加文件的文件路径。就我而言,我没有路径。【参考方案2】:我用这篇文章解决了
这个错误在上周一直困扰着我。此错误特定于 Google Chrome。不过,Chrome 本身并不是一个错误,因为其他浏览器会忽略重复的标题,这似乎是 Chrome 的一个问题。如果您或您的网络应用发送标头,则可以通过以下方式轻松解决此问题。
1 - 使用 "" 将文件名括起来。即
header('Content-Disposition: attachment; filename="'.$file_name.'"');
而不是
header('Content-Disposition: attachment; filename='.$file_name);
2 - 如果可能,将空格和逗号 (,) 替换为下划线 (_)
$file_name = str_replace(array('"', "'", '', ','), '_', $file_name);
3 - 通过将可选替换参数设置为 true 来明确告诉 php 覆盖标头。
header('Content-type: application/pdf', true);
Fix for Duplicate Headers Error 349
【讨论】:
不错,对我来说非常有效。谢谢一百万 这很有帮助。谢谢你。我的代码在 ASP.NET 中,这个链接提供了一个实现您的建议的示例。 ***.com/questions/93551/…【参考方案3】:您可以使用 file() 函数来避免手动更改标题:
return response()->file($path);
【讨论】:
以上是关于Err_Response_Headers_Multiple_Content_Disposition的主要内容,如果未能解决你的问题,请参考以下文章