English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Di recente, durante la creazione del sistema di gestione delle formazioni, ho incontrato un problema. La richiesta è di cliccare sui dati associati per scaricare gli allegati specificati e di farlo in modo batch (i dati associati non sono un datagrid, il backend li assembla).
L'effetto visivo è come segue:
L'idea generale è:
1. jQuery ottiene l'id dei dati collegati selezionati, assegna questo id all'array, infine assegna il valore dell'array alla variabile nascosta creata nella pagina
2. Il backend riceve il valore della variabile nascosta e lo itera nell'array per ottenere l'indirizzo di download del valore collegato, infine il download del pacchetto
Prima di tutto, il div html è collegato in backend
<div id="downloadInfo" runat="server"></div>
In secondo luogo, la scelta del download degli allegati, implementata tramite jquery, e il valore assegnato a una variabile nascosta nella pagina, il codice è il seguente:
// Scelta del download degli allegati $attach = $("#download-list"); var arr = []; $attach.on('click', '.no', function () { $(this).toggleClass('checked'); // Imposta e rimuovi, selezionato e non selezionato if ($(this).hasClass('checked')) { var guid = $(this).children("#hidAttachGuid").val(); arr.push(guid); // Aggiungi guid all'array arr } else { // Annulla la selezione var guid = $(this).children("#hidAttachGuid").val(); var n = arr.indexOf(guid); if (n != -1) arr.splice(n, 1); // Rimuovi il guid non selezionato dall'array arr } $("[id$='arrayGuid']").val(arr); });
Poiché è composto in backend, il pulsante è anche composto in backend, il pulsante backend chiama js
<button type='button' class='one-download' onclick='download()'>Scarica una volta</button> function download() { $("#btnDownload").click(); }
Evento di nascondere il pulsante tramite js
<span style="display: none"> <asp:Button ID="btnDownload" OnClick="btnDownload_Click" Text="Conferma" 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(); }
e codice a livello di pageload
public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform { #region Membro di INameTransform public string TransformDirectory(string name) { return null; } public string TransformFile(string name) { return Path.GetFileName(name); } #endregion }
Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e ti prego di supportare fortemente il tutorial di urla.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore è proprietà del rispettivo proprietario, il contenuto è stato contribuito volontariamente dagli utenti di Internet e caricato autonomamente, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del diritto d'autore, sei invitato a inviare una e-mail a notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente i contenuti sospetti di violazione del diritto d'autore.