简体   繁体   English

从url链接压缩多个pdf,如何

[英]zip multiple pdfs from url link, how to

I have a project that requires pdf files to be zipped up from an URL link and then downloaded and clickable by the end users browser. 我有一个项目,要求从URL链接压缩pdf文件,然后由最终用户浏览器下载和点击。 So far, I was able to zip one pdf file which isn't nearly what I'm looking to for. 到目前为止,我能够压缩一个pdf文件,这个文件几乎不是我想要的。

I'm not sure how to proceed from here. 我不知道怎么从这里开始。 Below is the code. 下面是代码。 Any help would be very much appreciated. 任何帮助将非常感谢。

ASP.NET Core ASP.NET核心


        [HttpGet("zipFiles")]
        public IActionResult ZipPDFFiles()
        {
            var fileNames = _repo.GetFileNames();

            foreach (var filesName in fileNames)
            {
                var urlLink = "https://example.com/folder/" + $"{filesName.PdfFileName}";

                var net = new System.Net.WebClient();
                var data = net.DownloadData(urlLink);

                var file = $"{filesName.PdfFileName}";

                var contentType = "application/zip";

                string zippedFolderName = "Archive.zip";

                using (MemoryStream ms = new MemoryStream())
                {
                    using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
                    {
                        var zipArchiveEntry = archive.CreateEntry($"{file}", System.IO.Compression.CompressionLevel.Fastest);
                        using (var zipStream = zipArchiveEntry.Open()) zipStream.Write(data, 0, data.Length);
                    }
                    return File(ms.ToArray(), contentType, $"{zippedFolderName}");
                }

            }
            return NotFound();
        }

Some improvements: 一些改进:

  • used HttpClient 使用了HttpClient
  • files uploaded simultaneously 文件同时上传
        var fileUrls = new[]
        {
            new Uri("https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/media/image3.5.png"),
            new Uri("https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/media/image4.png"),
            new Uri("https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/media/image6.png")
        };

        var downloadResults = fileUrls
            .Select(uri => (uri: uri, response: HttpClientFactory.Create().SendAsync(new HttpRequestMessage(HttpMethod.Get, uri))))
            .ToArray();

        await Task.WhenAll(downloadResults.Select(v => v.response));

        using (var ms = new MemoryStream())
        {
            using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
            {
                foreach (var download in downloadResults)
                {
                    var entry = archive.CreateEntry(download.uri.Segments.Last(), CompressionLevel.Fastest);

                    using (var zipStream = entry.Open())
                    {
                        var data = await download.response.Result.Content.ReadAsByteArrayAsync();

                        zipStream.Write(data, 0, data.Length);
                    }
                }
            }

            return File(ms.ToArray(), contentType, $"{zippedFolderName}");
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM