我有像电子邮件消息系统这样的应用程序。在这里我调整一个解决方案,从特定的帖子下载表中的所有文件。 这是我的代码:
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());
}
}
我不知道什么是问题,请帮助我..
答案 0 :(得分:1)
你将无法下载这样的多个文件,我想会发生的事情是循环经过一次,然后在第二次迭代时抛出异常。
你真正应该做的是将所有文件压缩到一个文件中进行下载,这个question应该让你知道我的意思。
通过压缩文件,您还可以获得压缩的好处(更少的带宽,更快的传输),并且用户(在您当前的场景中)将不会显示多个“另存为”对话窗口(更专业! )。
此link也可以帮助您了解其他一些潜在的想法(例如,使用带有URL参数的“下载”页面来识别文件)。我更喜欢压缩单文件选项的粉丝!
答案 1 :(得分:0)
您是否正确设置了Response.BufferOutput = true;
?如果没有,页面将在生成时发送,这意味着Response.Clear()将不会执行您想要的操作:)