Asp.net &引用;发送http标头后,服务器无法追加标头";
我有一个类似于电子邮件系统的应用程序。在这里,我调整了一个解决方案,从特定帖子下载表中的所有文件。 这是我的代码:Asp.net &引用;发送http标头后,服务器无法追加标头";,asp.net,asp.net-3.5,Asp.net,Asp.net 3.5,我有一个类似于电子邮件系统的应用程序。在这里,我调整了一个解决方案,从特定帖子下载表中的所有文件。 这是我的代码: protected void lbu_download_all_Click(object sender, EventArgs e) { if (rpt_file_list.Items.Count > 0) { using (DataClassesDataContext db = new DataClass
protected void lbu_download_all_Click(object sender, EventArgs e)
{
if (rpt_file_list.Items.Count > 0)
{
using (DataClassesDataContext db = new DataClassesDataContext())
{
var query = from f in db.Files
where f.Post_History_id == int.Parse(post_id.Value.ToString())
select new
{
FileName = f.File_name,
File_ext= f.File_ext
};
foreach (var item in query)
{
System.IO.FileInfo objFile = new FileInfo(Server.MapPath("~/PostFiles/" + item.FileName.ToString() + item.File_ext.ToString()));
if (objFile.Exists)
{
Response.Clear();
string strFileName = item.FileName.ToString() + item.File_ext.ToString();
Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName);
Response.AddHeader("Content-Length", objFile.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(objFile.FullName);
Response.BufferOutput = true;
Response.Flush();
}
}
}
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append("<script type = 'text/javascript'>");
sb.Append(" No files found to download');");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "script", sb.ToString());
}
}
受保护的无效lbu\u下载\u全部\u单击(对象发送方,事件参数e)
{
如果(rpt_文件_list.Items.Count>0)
{
使用(DataClassesDataContext db=newdataclassesdatacontext())
{
var query=来自db.Files中的f
其中f.Post_History_id==int.Parse(Post_id.Value.ToString())
选择新的
{
FileName=f.File\u name,
File\u ext=f.File\u ext
};
foreach(查询中的var项)
{
System.IO.FileInfo objFile=新文件信息(Server.MapPath(“~/PostFiles/”+item.FileName.ToString()+item.File_ext.ToString());
if(objFile.Exists)
{
Response.Clear();
字符串strFileName=item.FileName.ToString()+item.File_ext.ToString();
Response.AddHeader(“内容处置”、“附件;文件名=“+strFileName”);
AddHeader(“Content-Length”,objFile.Length.ToString());
Response.ContentType=“应用程序/八位字节流”;
WriteFile(objFile.FullName);
Response.BufferOutput=true;
Response.Flush();
}
}
}
}
其他的
{
StringBuilder sb=新的StringBuilder();
某人加上(“”);
sb.Append(“未找到可下载的文件”);
某人加上(“”);
RegisterStartupScript(this.GetType(),“script”,sb.ToString());
}
}
我不知道是什么问题,请帮助我。您是否有
响应。BufferOutput=true代码>设置是否正确?如果没有,页面将在生成时发送,这意味着Response.Clear()不会执行您想要的操作:)您将无法下载多个这样的文件,我想发生的情况是循环经过一次,然后在第二次迭代时抛出异常
你真正应该做的是把所有的文件压缩成一个文件下载,这会让你明白我的意思
通过压缩文件,您还将获得压缩的好处(更少的带宽,更快的传输),并且用户(在当前场景中)不会看到多个“另存为”对话框窗口(更专业!)
这也可能有助于您了解其他一些可能的想法(例如使用带有URL参数的“下载”页面来识别文件)。不过,我更喜欢压缩单文件选项 是的,正如你所说,我已经设置好了,但问题还没有解决。