zip несколько PDF-файлов из URL-ссылки, как - PullRequest
0 голосов
/ 01 мая 2019

У меня есть проект, который требует, чтобы pdf-файлы были заархивированы из URL-ссылки, а затем загружены и активированы браузером конечных пользователей.До сих пор я был в состоянии сжать один файл PDF, который не совсем то, что я ищу.

Я не уверен, что делать дальше.Ниже приведен код.Буду очень признателен за любую помощь.

ASP.NET Core


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

1 Ответ

0 голосов
/ 01 мая 2019

Некоторые улучшения:

  • используется 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}");
        }
...