c#,asp.net,压缩文件需要很长时间,浏览器会对ir做出响应

c#,asp.net,压缩文件需要很长时间,浏览器会对ir做出响应,c#,asp.net,javascript,C#,Asp.net,Javascript,我的网站上有图片,用户可以从中下载选定的图片。当用户选择多个图像时,文件作为zip文件下载;压缩过程在服务器上进行 然而,当用户选择更多的文件(大小也会增加,比如说500MB)时,当他按下下载按钮时,压缩就会在服务器上开始。网页挂起,在压缩过程完成之前,用户无法执行任何操作 有时浏览器(如Chrome)会发出消息(进程太长,请终止此进程)。所以我在这里寻求帮助 我需要一个可靠的建议 谢谢 我压缩文件的代码是: public string Zip(string f, bool original)

我的网站上有图片,用户可以从中下载选定的图片。当用户选择多个图像时,文件作为zip文件下载;压缩过程在服务器上进行

然而,当用户选择更多的文件(大小也会增加,比如说500MB)时,当他按下下载按钮时,压缩就会在服务器上开始。网页挂起,在压缩过程完成之前,用户无法执行任何操作

有时浏览器(如Chrome)会发出消息(进程太长,请终止此进程)。所以我在这里寻求帮助

我需要一个可靠的建议

谢谢

我压缩文件的代码是:

public string Zip(string f, bool original)
{

    string zip = "";
    try
    {
        files = HttpContext.Current.Server.UrlDecode(files);
        string[] fileCollection = files.Split('*');
        zipFile = class1.zipfile(fileCollection, IsOriginal);


        int fileLength = files.Length;
    }

    catch (Exception ex)
    {
        Console.WriteLine("Exception during processing {0}", ex);


    }
    return File;
三项建议:

  • 在客户端上显示忙碌屏幕 这让用户知道他 正在等待文件下载。你 可以实现这一点,即 下载到单独的iframe和 检查iframe的状态 (有关动态方法,请参见 )
  • 检查您实际如何压缩文件-是需要压缩还是只想下载所有图片 在一起不带拉链 压缩通常要快得多
  • 如果仍然需要太长时间-即使 对于繁忙的屏幕-考虑使用 异步方法:用户可以 请求包含图像的zip文件 他/她选择了,这会导致 系统开始处理zip文件 文件然后,用户可以等待或来 返回专用页面进行检查 zip文件的状态,如果 准备好了,马上下载 从服务器(即从虚拟服务器) 你放在哪个目录后面 处理)。这种方法是一种有效的方法 更多的参与,你也有 想想清理吧
  • 三项建议:

  • 在客户端上显示忙碌屏幕 这让用户知道他 正在等待文件下载。你 可以实现这一点,即 下载到单独的iframe和 检查iframe的状态 (有关动态方法,请参见 )
  • 检查您实际如何压缩文件-是需要压缩还是只想下载所有图片 在一起不带拉链 压缩通常要快得多
  • 如果仍然需要太长时间-即使 对于繁忙的屏幕-考虑使用 异步方法:用户可以 请求包含图像的zip文件 他/她选择了,这会导致 系统开始处理zip文件 文件然后,用户可以等待或来 返回专用页面进行检查 zip文件的状态,如果 准备好了,马上下载 从服务器(即从虚拟服务器) 你放在哪个目录后面 处理)。这种方法是一种有效的方法 更多的参与,你也有 想想清理吧

  • 我会将压缩拆分为一个单独的流程(BackgroundWorker流程?),然后更新状态栏(AJAX),让用户知道大概需要多长时间。

    我会将压缩拆分为一个单独的流程(BackgroundWorker流程?),然后更新状态栏(AJAX)让用户知道大概需要多长时间。

    @碎玻璃:对于你的建议2,我没有使用压缩。对于建议1:我正在使用XSLT、AJAX,所以您认为使用您的第一个建议很好?@Breake Glass:我已经为正在压缩和下载的文件完成了清理脚本,但是现在我正在考虑这种异步方法,您不认为如果用户按download,那么会打开一个新的小窗口,给他看进度条,给他看压缩文件的进度?我搞不懂,有人能帮我吗?@Breake Glass:你的建议2,我没有压缩。对于建议1:我正在使用XSLT、AJAX,所以您认为使用您的第一个建议很好?@Breake Glass:我已经为正在压缩和下载的文件完成了清理脚本,但是现在我正在考虑这种异步方法,您不认为如果用户按download,那么会打开一个新的小窗口,向他展示进度条,向他展示压缩文件的进度?我搞不懂,有人能帮我吗?@safi,想想看,这可能不是必需的。我认为@BrokenGlass在使用iframe表示状态方面有一个很好的解决方案。您可以设置一个会话变量,并在执行状态更新的iframe中读取该变量。@Kendrick:我正在等待backgroundworker进程。我应该也发布JCcript吗?我必须使用后台工作程序和可爱的web ui进度条。你有权修改class1.zipFile函数吗?如果是这样,您可以在那里生成第二个线程并报告进度。使用BackgroundWorker线程报告进度的问题是,您必须从BackgroundWorker.DoWork事件处理程序中报告状态。如果您可以一次向.zip添加一个文件,并在添加每个文件后触发ProgressChanged事件,那么就可以开始了。如果您只能向库发送文件列表,那么无论您想使用哪种方法,都会出现问题。这就是为什么我最喜欢@BrokenGlass的选项。@safi,仔细想想,它可能不是必需的。我认为@BrokenGlass在使用iframe表示状态方面有一个很好的解决方案。您可以设置一个会话变量,并在执行状态更新的iframe中读取该变量。@Kendrick:我正在等待backgroundworker进程。我应该也发布JCcript吗?我必须使用后台工作程序和可爱的web ui进度条。你有权修改class1.zipFile函数吗?如果是这样,您可以在那里生成第二个线程并报告进度。使用BackgroundWorker线程报告进度的问题是,您必须从BackgroundWorker.DoWork事件处理程序中报告状态。如果您可以一次向.zip添加一个文件,并在添加每个文件后触发ProgressChanged事件,那么就可以开始了。如果您只能发送一个文件列表t