Как получить файлы с s3 и заархивировать перед загрузкой - PullRequest
0 голосов
/ 03 июля 2019

Я работаю над .net core web API и хочу получить файлы из s3 и zip перед загрузкой.
Можете ли вы указать мне правильное направление? Я искал в Интернете и не смог найти решение.

так что этот блок кода может читать из файлов s3 (в корзине могут быть файлы разных типов), я просто не знаю, как сжать их все перед загрузкой

public async Task GetFilesAsync(string projectId)        {
        string bucketName = "MyBucket";
        ListObjectsRequest request = new ListObjectsRequest
        {
            BucketName = bucketName
        };

        ListObjectsResponse response = await _client.ListObjectsAsync(request);
        var item = response.S3Objects;

        foreach (var objt in item)
        {
            GetObjectRequest request1 = new GetObjectRequest();
            request1.BucketName = bucketName;
            request1.Key = objt.Key;

            GetObjectResponse Response = await _client.GetObjectAsync(request1);

           //HOW TO ZIP all of the files here and download as single file
            using (Stream responseStream = Response.ResponseStream)
            {
               // Response.WriteResponseStreamToFile("downloadLocation" + "\\" + objt.Key);
            }

        }
}

Я пробую это решение, но не могу заставить его работать:

using (var compressedFileStream = new MemoryStream())
{
    //Create an archive and store the stream in memory.
    using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Update, false))
    {
        foreach (var caseAttachmentModel in item)
        {
            //Create a zip entry for each attachment
            var zipEntry = zipArchive.CreateEntry(caseAttachmentModel.Key);

            //Get the stream of the attachment
            using (var originalFileStream = new MemoryStream(caseAttachmentModel.Body))
            using (var zipEntryStream = zipEntry.Open())
            {
                //Copy the attachment stream to the zip entry stream
                originalFileStream.CopyTo(zipEntryStream);
            }
        }

        return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Filename.zip" };
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...