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