지정된 첨부파일을 다운로드하려면 바인딩된 데이터를 클릭해야 하며 일괄적으로 다운로드해야 합니다(바인딩된 데이터는 데이터그리드, 백그라운드 스플라이싱 바인딩이 아닙니다).
렌더링은 다음과 같습니다.
일반 아이디어:
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); });
백그라운드에 쪼개져있으니까 버튼도 쪼개짐 백그라운드에서 백그라운드버튼이 js를 호출함
<button type='button' class='one-download' onclick='download()'>一键下载</button> function download() { $("#btnDownload").click(); }
js가 숨겨진 버튼 이벤트를 트리거합니다
<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(); }
페이지로드와 동일한 레이어 코드
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 }