最近在做培訓管理系統中遇到一個問題,需求需點擊綁定的數據,將指定的附件下載下來,並且是批量下載(綁定的數據非datagrid,後台拼接的綁定)。
效果圖如下:
大體思路:
1.jquery得到選中的綁定數據的id,將這個id賦值到數組中,最後將這個數組的值賦值給頁面中創建的隱藏變量
2.後台獲取到隱藏變量的值,並將它循環數組取值,得到綁定值的下載地址,最後打包下載
首先html中div根據後台綁定
<div id="downloadInfo" runat="server"></div>
其次是下載附件的選擇,利用jquery實現,並且將值賦值給頁面中的隱藏變量,代碼如下:
// 下載附件的選擇 $attach = $("#download-list"); var arr = [] $attach.on('click', '.no', function () { $(this).toggleClass('checked');//設置和移除,選中與不選中 if ($(this).hasClass('checked')) { var guid = $(this).children("#hidAttachGuid").val(); arr.push(guid);//將guid添加到arr數組中 } else {//取消選中時 var guid = $(this).children("#hidAttachGuid").val(); var n = arr.indexOf(guid); if (n != -1) arr.splice(n, 1);//將指定不選中的guid移除arr數組 } $("[id$='arrayGuid']").val(arr); });
因為是後台拼接的,把button也拼接在了後台,後台button 調用js
<button type='button' class='one-download' onclick='download()'>一鍵下載</button> function download() { $("#btnDownload").click(); }
js觸發隱藏button事件
<span style="display: none"> <asp:Button ID="btnDownload" OnClick="btnDownload_Click" Text="確定" runat="server" /> <input type="text" id="arrayGuid" runat="server" /> </span>
後台一鍵打包下載代碼:
protected void btnDownload_Click(object sender, EventArgs e) { //ZipFileByCode(); string attachGuid = arrayGuid.Value; string[] sArray = attachGuid.Split(','); List<string> list = new List<string>(); foreach (string i in sArray) { //這裡是循環得到指定需要下載的所有id } Download(list, ""+lblCourseName.Text+"相關附件材料.rar"); }
public void ZipFileByCode() { MemoryStream ms = new MemoryStream(); byte[] buffer = null; using (ZipFile file = ZipFile.Create(ms)) { file.BeginUpdate(); file.NameTransform = new MyNameTransfom();//通過這個名稱格式化器,可以將裡面的文件名進行一些處理。默認情況下,會自動根據文件的路徑在zip中創建有關的文件夾。 file.Add(Server.MapPath("/Content/images/img01.jpg")); file.CommitUpdate(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); } Response.AddHeader("content-disposition", "attachment;filename=test.zip"); Response.BinaryWrite(buffer); Response.Flush(); Response.End(); }
private void Download(IEnumerable<string> files, string zipFileName) { //根據所選文件打包下載 MemoryStream ms = new MemoryStream(); byte[] buffer = null; using (ZipFile file = ZipFile.Create(ms)) { file.BeginUpdate(); file.NameTransform = new MyNameTransfom();//通過這個名稱格式化器,可以將裡面的文件名進行一些處理。默認情況下,會自動根據文件的路徑在zip中創建有關的文件夾。 foreach (var item in files) { file.Add(item); } //file.Add(Server.MapPath("../../BigFileUpLoadStorage/1.png")); file.CommitUpdate(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); } Response.AddHeader("content-disposition", "attachment;filename=" + zipFileName); Response.BinaryWrite(buffer); Response.Flush(); Response.End(); }
和pageload同層代碼
public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform { #region INameTransform 成員 public string TransformDirectory(string name) { return null; } public string TransformFile(string name) { return Path.GetFileName(name); } #endregion }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。