Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用$.post或$.get返回可下载的zip文件_C#_Jquery_Asp.net Mvc 3_Asp.net Mvc 2 - Fatal编程技术网

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

C# 使用$.post或$.get返回可下载的zip文件,c#,jquery,asp.net-mvc-3,asp.net-mvc-2,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() {

我正在制作一个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);
    }
$('.zipFiles').live('click',function(){
$.post('/Home/ZipFiles');
});
//返回文件
公共文件结果ZipFiles()
{
var filesToZip=Session[“DownloadQue”]作为列表;
var savedZipFile=Server.MapPath(“~/App_Data/”)+DateTime.Now.Minute+“.zip”;
如果(filesToZip!=null&&filesToZip.Count>0)
使用(var zip=new ZipFile(savedZipFile))
{                    
foreach(filesToZip中的字符串项)
{
var path=Server.MapPath(path.Combine(“~/Pics/”,item));
zip.AddFile(路径@“\cf”);
}
zip.Comment=“这是在线制作的”;
zip.Save();
}
返回文件(savedZipFile,System.Net.Mime.MediaTypeNames.Application.Zip);
}

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

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


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

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

$('.zipFiles').live('click', function () {
            $.post('/Home/ZipFiles',"",function(data){
               alert(data);
            });
});
要下载文件,请尝试以下操作:

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

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

但是使用“$('form').submit();”是我一直在寻找的,对我来说非常有效


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

使用Ajax下载文件是不可能的。您有25个问题,但没有公认的答案。你不喜欢别人帮助你,因为你不尊重他们吗?@Rune FS,你有没有想过我没有得到一个正确的答案?我宁愿不接受一个答案,而只是接受一半作为一,然后另一个有同样问题的人因为这一半作为解决方案而挣扎。所以我肯定我得到了其他用户的尊重。我希望这对你来说是一个很好的答案。在我写评论之前,我看到的所有人都有一个答案,有一个解决方案,或者你可以在哪里加强问题,使其可以回答,或者你问了一些不可能的问题。