2013-03-13 297 views
1

我有一個觀點在這裏我把事件的ID,然後我可以下載所有該事件的圖片..... 這裏是我的代碼ASP MVC下載Zip文件

[HttpPost] 
    public ActionResult Index(FormCollection All) 
    { 
     try 
     { 
      var context = new MyEntities(); 

      var Im = (from p in context.Event_Photos 
         where p.Event_Id == 1332 
         select p.Event_Photo); 

      Response.Clear(); 

      var downloadFileName = string.Format("YourDownload-{0}.zip", DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss")); 
      Response.ContentType = "application/zip"; 

      Response.AddHeader("content-disposition", "filename=" + downloadFileName); 

      using (ZipFile zipFile = new ZipFile()) 
      { 
       zipFile.AddDirectoryByName("Files"); 
       foreach (var userPicture in Im) 
       { 
        zipFile.AddFile(Server.MapPath(@"\") + userPicture.Remove(0, 1), "Files"); 
       } 
       zipFile.Save(Response.OutputStream); 

       //Response.Close(); 
      } 
      return View(); 
     } 
     catch (Exception ex) 
     { 
      return View(); 
     } 
    } 

的問題是,每次我得到的HTML頁面下載,而不是下載「Album.zip」我得到「Album.html」任何想法?

+0

調試如果'downloadFileName'包含'.zip'擴展.. – 2013-03-13 13:01:19

+0

它包含的.zip 這裏是它是什麼「YourDownload-2013-03-13-15_04_20.zip」 – 2013-03-13 13:06:00

回答

9

在MVC中,而不是返回一個觀點,如果你想返回一個文件,你可以通過執行返回以此爲ActionResult

return File(zipFile.GetBytes(), "application/zip", downloadFileName); 
// OR 
return File(zipFile.GetStream(), "application/zip", downloadFileName); 

不要招惹手動寫入到輸出流如果你使用MVC。

雖然我不確定您是否可以從ZipFile類中獲取字節或流。或者,您可能希望它寫它輸出到MemoryStream,然後返回:

var cd = new System.Net.Mime.ContentDisposition { 
    FileName = downloadFileName, 
    Inline = false, 
}; 
Response.AppendHeader("Content-Disposition", cd.ToString()); 
var memStream = new MemoryStream(); 
zipFile.Save(memStream); 
memStream.Position = 0; // Else it will try to read starting at the end 
return File(memStream, "application/zip"); 

並利用這一點,你可以刪除在你正在做與Response什麼都行。無需ClearAddHeader。檢查

+0

我只當我取代「工作應用程序/ zip「與」application/octet-stream「甚至在我的代碼中。 也zipFile.GetBytes()給出了一個錯誤 – 2013-03-13 14:03:43

+0

我有另一個問題沒有.zip文件包含文件的整個路徑我只想要在zip文件中的圖像? 我怎麼能這樣做? – 2013-03-13 14:04:39

+0

改變你的答案,就像我告訴你的,我會標記它 – 2013-03-13 14:07:52