HTML JS API public ActionResult BatchDownloadFiles(string str, int type) { var idList = str.Split(',').ToList().ConvertAll(x => int.Parse(x)); MemoryS ...
HTML
<a class="btn btn-warning" id="btnDownload">選中下載</a>
JS
/* 批量下載 */ // li 列表的文件下載 $("#btnDownload").on('click', function() { var arr = []; var urls = escape(arr.join(',')); $(this).attr('href', '@Url.Action("BatchDownloadFiles")?str=' + urls + '&r=' + Math.random()); });
API
public ActionResult BatchDownloadFiles(string str, int type) { var idList = str.Split(',').ToList().ConvertAll(x => int.Parse(x)); MemoryStream ms = new MemoryStream(); ZipOutputStream zos = new ZipOutputStream(ms); zos.IsStreamOwner = false; zos.SetLevel(1);//設置壓縮級別 var rsp = new GetListByDetailIDListRequest { UserID = CurrentUserId, JobTypeID = type, IDList = idList }.GetResponse(); if (rsp.IsSuccess) { rsp.Data.ForEach(dto => { var filebyte = ByteOfGetOrderFiles(dto); //byte類型的數據 ZipEntry entry = new ZipEntry(fileName); //定義新的壓縮數據對象 zos.PutNextEntry(entry); zos.Write(filebyte, 0, filebyte.Length); //寫入 }); } zos.Finish(); zos.Close(); ms.Position = 0; return File(ms, "application/x-zip-compressed", string.Format("批量下載文件-{0}.zip", DateTime.Now.ToString("yyyy年MM月dd HH時mm分ss秒"))); } public byte[] ByteOfGetOrderFiles(ExtractRecordDetailDTO dto) { var stream = DownloadFile(dto.SourceFile); byte[] buffur = new byte[stream.Length]; stream.Read(buffur, 0, (int)stream.Length); return buffur; } public static Stream DownloadFile(string path) { using (var client = new WebClient()) { var stream = client.DownloadData(path); var outStream = new MemoryStream(stream); return outStream; } }View Code