【问题标题】:zip multiple pdfs from url link, how to从 url 链接压缩多个 pdf,如何
【发布时间】:2019-05-01 00:50:07
【问题描述】:

我有一个项目需要从 URL 链接压缩 pdf 文件,然后下载并由最终用户浏览器单击。到目前为止,我能够压缩一个 pdf 文件,这几乎不是我想要的。

我不知道如何从这里开始。下面是代码。任何帮助将不胜感激。

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();
        }

【问题讨论】:

    标签: c# pdf asp.net-core zip memorystream


    【解决方案1】:

    一些改进:

    • 使用了HttpClient
    • 文件同时上传
            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}");
            }
    

    【讨论】:

    • 感谢您的评论。文件引用存储在数据库中。实际文件位于 URL 链接中。如何遍历链接并为每个文件添加 zip 条目?
    • 再次感谢您的更新。如果我想从 URL 链接压缩文件怎么办?例如,如果链接是:var urlLink = "https://example.com/folder/" + $"{filesName.PdfFileName}";?我有来自我的数据库的参考,我只是遍历 url 的结尾。就像上面的例子一样。从您的示例中,您有一组有效的链接,但不是我想要的。
    • @Chris H. - 我给你鱼竿,请你自己钓:)
    • 杆太短了。哈哈。我将不得不再次提出问题以获得帮助。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2023-03-28
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多