gpt4 book ai didi

c# - 如何使用 ASP.NET 下载多个文件?

转载 作者:行者123 更新时间:2023-11-30 13:37:31 26 4
gpt4 key购买 nike

我正在尝试使用 asp.net 下载多个文件。我有一个名为 DownloadFileButton 的按钮和一个名为 FilePath 的 ArrayList(它包含所有文件路径)。因此,当我单击“下载”按钮时,只会下载一个文件(文件路径列表中的第一个文件)。因为 Response.End() 导致脚本停止处理。当我注释掉 Response.End() 时,我在 Response.ClearHeaders() 处得到一个异常。

如何克服这个问题?

我的代码:

protected void DownloadFileButton_Click(object sender, EventArgs e)
{
for (int i = 0; i < FilePath.Count; i++)
{
string path = FilePath[i];

FileInfo file = new FileInfo(path);

if(file.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.Flush();
Response.TransmitFile(file.FullName);
Response.End();
}
}
}
}

最佳答案

how to overcome this?

一句话(或两句),你没有。

HTTP 是一个请求/响应系统。任何响应都必须作为对请求的答复。鉴于此,您不能向单个请求发送多个 响应。如果不出意外,将不会有客户端监听这些响应(因为它已经得到了它正在等待的响应)。

所以基本上你有两个选择:

  1. 发出多个请求,每个请求对应一个正在下载的"file"。这将为客户创建多种响应。
  2. 在服务器端代码中使用一些归档工具(Zip 库是这方面的标准工具)将文件合并为一个文件,然后发送那个 文件作为响应。然后客户需要取消存档。 (如果客户端是用户,他们会手动完成。一个自解压的可执行 Zip 可以帮助解决这个问题。如果客户端是一个应用程序,可以在客户端使用相同的库来提取存档的内容并保存文件。)

一个请求 = 一个响应。

关于c# - 如何使用 ASP.NET 下载多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com