ZipArchive 打包下载
private IActionResult DownloadZipFromUrl(string[] guids,string zipFullName) { using (MemoryStream zipStream = new MemoryStream()) { using (System.Net.WebClient webClient = new System.Net.WebClient()) { using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, leaveOpen: true)) { foreach (var m in guids) { if (string.IsNullOrWhiteSpace(m)) continue; if (m == Guid.Empty.ToString()) continue; #region build url : https://****/upload/image?g=353e7e1b-69ae-4a60-8cfc-3737c2a64eaa&j=false var builder = new UriBuilder() { Scheme = Request.Scheme, Host = Request.Host.Host, Path = "upload/image", Query = "j=false&g=" + m, }; if (Request.Host.Port != null) { builder.Port = Request.Host.Port.Value; } #endregion webClient.DownloadDataCompleted += wc_DownloadDataCompleted; var attachmentData = webClient.DownloadData(builder.Uri); ZipArchiveEntry entry = archive.CreateEntry(string.IsNullOrWhiteSpace(_DownloadAttachmentFileName) ? "File1.pdf" : _DownloadAttachmentFileName, System.IO.Compression.CompressionLevel.Fastest); using (var entryStream = entry.Open()) { entryStream.Write(attachmentData); } } } }// disposal of archive will force data to be written to memory stream. zipStream.Position = 0; //reset memory stream position. return File(zipStream.ToArray(), "application/vnd.ms-excel", zipFullName); } }
获取文件名
private string _DownloadAttachmentFileName = string.Empty; private void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e) { WebClient wc = sender as WebClient; // Try to extract the filename from the Content-Disposition header if (!String.IsNullOrEmpty(wc.ResponseHeaders["Content-Disposition"])) { _DownloadAttachmentFileName = wc.ResponseHeaders["Content-Disposition"].Substring(wc.ResponseHeaders["Content-Disposition"].IndexOf("filename=") + 10).Replace(""", ""); //FileName ok } var data = e.Result; //File OK }