使用$返回可下载的zip文件.Post或$.get

本文关键字:文件 Post get zip 返回 下载 使用 | 更新日期: 2023-09-27 18:18:56

我正在制作一个zip文件,我想返回一个可下载的文件,但我无法找出返回文件部分,即使我尝试了一些例子,我在网上找到。

这是我现在使用的代码,它没有$.post()的工作,但我需要它与jquery一起工作。欢迎大家集思广益

$('.zipFiles').live('click', function () {
            $.post('/Home/ZipFiles');
});

//return a file
public FileResult ZipFiles()
    {
        var filesToZip = Session["DownloadQue"] as List<string>;
        var savedZipFile = Server.MapPath("~/App_Data/") + DateTime.Now.Minute + ".zip";
        if (filesToZip != null && filesToZip.Count > 0)
            using (var zip = new ZipFile(savedZipFile))
            {                    
                foreach (string item in filesToZip)
                {
                    var path = Server.MapPath(Path.Combine("~/Pics/", item));
                    zip.AddFile(path, @"'cf");
                }
                zip.Comment = "this was made online";                    
                zip.Save();
            }
        return File(savedZipFile, System.Net.Mime.MediaTypeNames.Application.Zip);
    }

使用$返回可下载的zip文件.Post或$.get

您可以通过jQuery返回文件的内容或操作的结果。这里在你的代码/home/zipfiles返回。zip内容,我认为你不想显示/打印zip内容。

$('.zipFiles').live('click', function () {
            $.post('/Home/ZipFiles',"",function(data){
               alert(data);
            });
});

下载文件:

$('.zipFiles').live('click', function () {
   window.location.href="/home/zipfiles";              
 });

如前所述,您不能通过AJAX下载文件,您需要做一些工作。

首先,在您的action方法中,而不是返回zip文件,生成一个guid(或其他随机但唯一的名称)并将其保存到服务器。你的动作方法应该返回一个URL到这个文件。

使用$的成功回调。Post来实际下载文件。让回调解析你的URL,然后打开一个新的窗口/iframe指向那个URL。

我知道标准是使用$。

,但使用"$('form').submit();"是我正在寻找的,并为我完美地工作。

将用户留在同一页面并下载文件结果