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

时间:2011-12-29 10:05:08

标签: c# jquery asp.net-mvc-3 asp.net-mvc-2

我正在制作一个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);
    }

3 个答案:

答案 0 :(得分:2)

您可以通过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";              
 });

答案 1 :(得分:1)

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

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

使用$ .post的成功回调来实际下载文件。让回调解析您的URL,然后打开指向该URL的新窗口/ iframe。

答案 2 :(得分:0)

我知道标准是使用$ .get或$ .post ...

但使用“$('form')。submit();”是我正在寻找并为我完美工作。

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