最近在做教育訓練管理系統中遇到一個問題,需求需點選綁定的資料,将指定的附件下載下傳下來,并且是批量下載下傳(綁定的資料非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");
}
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
}
添加元件:https://files.cnblogs.com/files/edisoner/ICSharpCode.SharpZipLib.rar