码迷,mamicode.com
首页 > Web开发 > 详细

.net 打包下载

时间:2018-07-26 19:52:14      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:each   attach   amp   from   文件   ati   tin   request   void   

 

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
        }

  

 

.net 打包下载

标签:each   attach   amp   from   文件   ati   tin   request   void   

原文地址:https://www.cnblogs.com/panpanwelcome/p/9373662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!