幫朋友解決一個C#中發送壓縮文件的的問題,由於感受解釋起來更麻煩,就直接用幾分鐘時間寫了個小Demo。本着"走過路過"不錯過的原則,也給記錄一下.前端
很是簡單的一個a標籤. 順便提一句,此處用a標籤,下載文件時,當前頁面並不會跳轉;ajax
若是使用ajax異步下載文件的話,由於response的緣由,通常請求瀏覽器是會處理服務器輸出的 response,例如文件下載,json串返回等,ajax請求只是個「字符性」的請求,能夠讀取到返回的response,但也只是讀取而已,是沒法執行的,說白點就是js沒法調用到瀏覽器的下載處理機制和程序。json
基於以上緣由,ajax下載文件,會把文件內容看成文本信息讀取,而不是執行下載. 應該能夠經過配置方式解決,這裏就再也不細說了.後端
public ActionResult downZip() { var path = Server.MapPath("~/temp/123.zip"); var name = Path.GetFileName(path); return File(path, "application/zip", name); }
public ActionResult downZip() { ////1. //var path = Server.MapPath("~/temp/123.zip"); //var name = Path.GetFileName(path); //return File(path, "application/zip", name); //2. String fileName, zipName; byte[] bts; using (ZipFile zip = new ZipFile()) { zip.AddDirectory(Server.MapPath("~/public")); fileName = Server.MapPath("~/temp/simple.zip"); zipName = Path.GetFileName(fileName); zip.Save(fileName); bts = System.IO.File.ReadAllBytes(fileName); System.IO.File.Delete(fileName); } return File(bts, "application/zip", zipName); }
"public"是被壓縮的目錄,"temp"是存放臨時zip文件的地方瀏覽器
這種方式,有一個最大的弊端,就是文件較大時,內存佔用太高.這個地方應該再優化下. 這周若是沒時間,那就下週吧,我專門來再續個優化版(ps: 若是我還記得的話...嘿嘿)服務器
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利;app
本文出自:博客園--別問是誰異步