Я работаю над .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" };
}
}