2011-12-29 51 views
1

我正在創建一個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); 
    } 
+0

無法使用ajax下載文件 – zerkms 2011-12-29 10:33:17

+1

您有25個問題沒有被接受的答案。你不喜歡有人幫助你,因爲你不向他們表示尊重嗎? – 2011-12-29 10:38:19

+0

@Rune FS,你有沒有想過我沒有得到一個正確的答案?我寧願不接受答案,然後只接受一半的答案,然後有同樣問題的其他人也因爲這一半而失敗了。所以一定要尊重其他用戶。我希望這是對你的回答enogh – 2011-12-29 10:50:13

回答

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";    
}); 
+0

這就是天才。非常感謝 – 2011-12-29 10:56:27

1

如前所述,你無法通過AJAX下載一個文件,你需要做一些工作的周圍。

首先在您的操作方法而不是返回zip文件生成一個GUID(或其他隨機但唯一的名稱)並將其保存到您的服務器。你的動作方法應該返回一個URL到這個文件。

使用$ .post的成功回調來實際下載文件。讓回調分析您的URL,然後打開一個指向該URL的新窗口/ iframe。

+0

+1這是一個好主意 – 2011-12-29 10:53:02

0

我知道的標準是使用和$ .get或$。員額...

但使用「$( '形式' )。提交();」是我一直在尋找併爲我完美工作的。

它將用戶留在同一頁面上並下載文件結果。