From 5ba682046be2c265fe739b9bb3b1167003cba29c Mon Sep 17 00:00:00 2001 From: Vitaliy Basanets Date: Mon, 21 Mar 2022 23:19:50 +0200 Subject: [PATCH 1/4] remove comments on test --- ManagedCode.Storage.Tests/StorageBaseTests.cs | 101 ------------------ 1 file changed, 101 deletions(-) diff --git a/ManagedCode.Storage.Tests/StorageBaseTests.cs b/ManagedCode.Storage.Tests/StorageBaseTests.cs index 31471538..85fcf7de 100644 --- a/ManagedCode.Storage.Tests/StorageBaseTests.cs +++ b/ManagedCode.Storage.Tests/StorageBaseTests.cs @@ -62,19 +62,16 @@ protected StorageBaseTests() [Fact] public async Task GetBlobListAsync() { - //Create list fileName and uploadData var listFile = new List<(string FileName, string UploadedContent)>(); listFile.Add(($"{nameof(GetBlobListAsync)}1.txt", $"test {nameof(GetBlobListAsync)}1")); listFile.Add(($"{nameof(GetBlobListAsync)}2.txt", $"test {nameof(GetBlobListAsync)}2")); listFile.Add(($"{nameof(GetBlobListAsync)}3.txt", $"test {nameof(GetBlobListAsync)}3")); - // Upload files to server foreach (var item in listFile) { await PrepareFileToTest(item.UploadedContent, item.FileName); } - //Get uploaded files var result = Storage.GetBlobListAsync(); var listResult = await result.ToListAsync(); @@ -84,7 +81,6 @@ public async Task GetBlobListAsync() //listResult.Should().BeEquivalentTo(expectedList, x => x.Excluding(f => f.Uri)); result.Should().NotBeNull(); - // Delete files from server foreach (var item in listFile) { await DeleteFileAsync(item.FileName); @@ -94,13 +90,11 @@ public async Task GetBlobListAsync() [Fact] public async Task GetBlobsAsync() { - //Create list fileName and uploadData var listFile = new List<(string FileName, string UploadedContent)>(); listFile.Add(($"{nameof(GetBlobsAsync)}1.txt", $"test {nameof(GetBlobsAsync)}1")); listFile.Add(($"{nameof(GetBlobsAsync)}2.txt", $"test {nameof(GetBlobsAsync)}2")); listFile.Add(($"{nameof(GetBlobsAsync)}3.txt", $"test {nameof(GetBlobsAsync)}3")); - // Upload files to server foreach (var item in listFile) { await PrepareFileToTest(item.UploadedContent, item.FileName); @@ -110,7 +104,6 @@ public async Task GetBlobsAsync() blobList.Add($"{nameof(GetBlobsAsync)}1.txt"); blobList.Add($"{nameof(GetBlobsAsync)}2.txt"); - //Get necessary files var result = Storage.GetBlobsAsync(blobList); var listResult = await result.ToListAsync(); @@ -119,7 +112,6 @@ public async Task GetBlobsAsync() listResult.Should().NotBeEquivalentTo(expectedList); result.Should().NotBeNull(); - // Delete files from server foreach (var item in listFile) { await DeleteFileAsync(item.FileName); @@ -132,16 +124,13 @@ public async Task GetBlobAsync() const string uploadContent = $"test {nameof(GetBlobAsync)}"; const string fileName = $"{nameof(GetBlobAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Get file by fileName var result = await Storage.GetBlobAsync(fileName); result.Should().NotBeNull(); result.Name.Should().Be(fileName); - //Delete file await DeleteFileAsync(fileName); } @@ -155,24 +144,19 @@ public async Task UploadFileAsStreamSpecifyingFileNameAsync() const string uploadContent = $"test {nameof(UploadFileAsStreamSpecifyingFileNameAsync)}"; const string fileName = $"{nameof(UploadFileAsStreamSpecifyingFileNameAsync)}.txt"; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); - //Check is exist file if (await Storage.ExistsAsync(fileName)) { await Storage.DeleteAsync(fileName); } - //Upload file as stream await Storage.UploadStreamAsync(fileName, stream); - //Download the file var downloadedContent = await DownloadAsync(fileName); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -185,24 +169,19 @@ public async Task UploadFileAsStreamSpecifyingBlobMetadataAsync() Name = $"{nameof(UploadFileAsStreamSpecifyingBlobMetadataAsync)}.txt" }; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); - //Check is exist file if (await Storage.ExistsAsync(blobMetadata)) { await Storage.DeleteAsync(blobMetadata); } - //Upload file as stream await Storage.UploadStreamAsync(blobMetadata, stream); - //Download the file var downloadedContent = await DownloadAsync(blobMetadata.Name); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(blobMetadata.Name); } @@ -212,24 +191,19 @@ public async Task UploadFileAsTextSpecifyingFileNameAsync() const string uploadContent = $"test {nameof(UploadFileAsTextSpecifyingFileNameAsync)}"; const string fileName = $"{nameof(UploadFileAsTextSpecifyingFileNameAsync)}.txt"; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); - //Check is exist file if (await Storage.ExistsAsync(fileName)) { await Storage.DeleteAsync(fileName); } - //Upload file as text await Storage.UploadAsync(fileName, uploadContent); - //Download the file var downloadedContent = await DownloadAsync(fileName); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -242,24 +216,19 @@ public async Task UploadFileAsTextSpecifyingBlobMetadataAsync() Name = $"{nameof(UploadFileAsTextSpecifyingBlobMetadataAsync)}.txt" }; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); - //Check is exist file if (await Storage.ExistsAsync(blobMetadata)) { await Storage.DeleteAsync(blobMetadata); } - //Upload file as text await Storage.UploadAsync(blobMetadata, uploadContent); - //Download the file var downloadedContent = await DownloadAsync(blobMetadata.Name); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(blobMetadata.Name); } @@ -269,25 +238,20 @@ public async Task UploadFileFromPathSpecifyingFileNameAsync() const string uploadContent = $"test {nameof(UploadFileFromPathSpecifyingFileNameAsync)}"; const string fileName = $"{nameof(UploadFileFromPathSpecifyingFileNameAsync)}.txt"; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); var localFile = await LocalFile.FromStreamAsync(stream); - //Check is exist file if (await Storage.ExistsAsync(fileName)) { await Storage.DeleteAsync(fileName); } - //Upload file as local file await Storage.UploadFileAsync(fileName, localFile.FilePath); - //Download the file var downloadedContent = await DownloadAsync(fileName); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -300,25 +264,20 @@ public async Task UploadFileFromPathSpecifyingBlobMetadataAsync() Name = $"{nameof(UploadFileFromPathSpecifyingBlobMetadataAsync)}.txt" }; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); var localFile = await LocalFile.FromStreamAsync(stream); - //Check is exist file if (await Storage.ExistsAsync(blobMetadata)) { await Storage.DeleteAsync(blobMetadata); } - //Upload file as local file await Storage.UploadFileAsync(blobMetadata, localFile.FilePath); - //Download the file var downloadedContent = await DownloadAsync(blobMetadata.Name); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(blobMetadata.Name); } @@ -328,23 +287,18 @@ public async Task UploadFileAsArrayAsync() const string uploadContent = $"test {nameof(UploadFileAsArrayAsync)}"; const string fileName = $"{nameof(UploadFileAsArrayAsync)}.txt"; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); - //Check is exist file if (await Storage.ExistsAsync(fileName)) { await Storage.DeleteAsync(fileName); } - //Upload file as byte array await Storage.UploadAsync(new BlobMetadata { Name = fileName }, byteArray); - //Download the file var downloadedContent = await DownloadAsync(fileName); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -353,14 +307,11 @@ public async Task UploadFileAsAsTextWithoutNameSpecifiedAsync() { const string uploadContent = $"test {nameof(UploadFileAsAsTextWithoutNameSpecifiedAsync)}"; - //Upload file as text var fileName = await Storage.UploadAsync(uploadContent); - //Download the file var downloadedContent = await DownloadAsync(fileName); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -369,18 +320,14 @@ public async Task UploadFileAsAsStreamWithoutNameSpecifiedAsync() { const string uploadContent = $"test {nameof(UploadFileAsAsStreamWithoutNameSpecifiedAsync)}"; - //Forming file to upload var byteArray = Encoding.ASCII.GetBytes(uploadContent); var stream = new MemoryStream(byteArray); - //Upload file as text var fileName = await Storage.UploadAsync(stream); - //Download the file var downloadedContent = await DownloadAsync(fileName); downloadedContent.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -394,20 +341,16 @@ public async Task DownloadFileBlobMetadataAsLocalFileAsync() const string uploadContent = $"test {nameof(DownloadFileBlobMetadataAsLocalFileAsync)}"; const string fileName = $"{nameof(DownloadFileBlobMetadataAsLocalFileAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Download file as LocalFile var localFile = await Storage.DownloadAsync(new BlobMetadata { Name = fileName }); using var sr = new StreamReader(localFile.FileStream, Encoding.UTF8); - //Get content from file as string string content = await sr.ReadToEndAsync(); content.Should().NotBeNull(); content.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -417,20 +360,16 @@ public async Task DownloadFileAsLocalFileAsync() const string uploadContent = $"test {nameof(DownloadFileAsLocalFileAsync)}"; const string fileName = $"{nameof(DownloadFileAsLocalFileAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Download file as LocalFile var localFile = await Storage.DownloadAsync(fileName); using var sr = new StreamReader(localFile.FileStream, Encoding.UTF8); - //Get content from file as string string content = await sr.ReadToEndAsync(); content.Should().NotBeNull(); content.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -440,20 +379,16 @@ public async Task DownloadFileBlobMetadataAsync() const string uploadContent = $"test {nameof(DownloadFileAsync)}"; const string fileName = $"{nameof(DownloadFileAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Download file as stream var stream = await Storage.DownloadAsStreamAsync(new BlobMetadata { Name = fileName}); using var sr = new StreamReader(stream, Encoding.UTF8); - //Get content from file as string string content = await sr.ReadToEndAsync(); content.Should().NotBeNull(); content.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -463,20 +398,16 @@ public async Task DownloadFileAsync() const string uploadContent = $"test {nameof(DownloadFileAsync)}"; const string fileName = $"{nameof(DownloadFileAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Download file as stream var stream = await Storage.DownloadAsStreamAsync(fileName); using var sr = new StreamReader(stream, Encoding.UTF8); - //Get content from file as string string content = await sr.ReadToEndAsync(); content.Should().NotBeNull(); content.Should().Be(uploadContent); - //Delete file await DeleteFileAsync(fileName); } @@ -492,7 +423,6 @@ public async Task DeleteFileListAsync() listFile.Add(($"{nameof(DeleteFileListAsync)}2.txt", $"test {nameof(DeleteFileListAsync)}2")); listFile.Add(($"{nameof(DeleteFileListAsync)}3.txt", $"test {nameof(DeleteFileListAsync)}3")); - // Upload files to server foreach (var item in listFile) { await PrepareFileToTest(item.UploadedContent, item.FileName); @@ -500,10 +430,8 @@ public async Task DeleteFileListAsync() var expectedList = listFile.Select(x => x.FileName); - //Delete list files await Storage.DeleteAsync(expectedList); - //Check is exist files var result = Storage.ExistsAsync(expectedList); var resultList = await result.ToListAsync(); @@ -522,7 +450,6 @@ public async Task DeleteFileAsBlobMetadataListAsync() listFile.Add(($"{nameof(DeleteFileAsBlobMetadataListAsync)}2.txt", $"test {nameof(DeleteFileAsBlobMetadataListAsync)}2")); listFile.Add(($"{nameof(DeleteFileAsBlobMetadataListAsync)}3.txt", $"test {nameof(DeleteFileAsBlobMetadataListAsync)}3")); - // Upload files to server foreach (var item in listFile) { await PrepareFileToTest(item.UploadedContent, item.FileName); @@ -530,10 +457,8 @@ public async Task DeleteFileAsBlobMetadataListAsync() var expectedList = listFile.Select(x => new BlobMetadata { Name = x.FileName }); - //Delete list blobMetadata await Storage.DeleteAsync(expectedList); - //Check is exist files var result = Storage.ExistsAsync(expectedList); var resultList = await result.ToListAsync(); @@ -541,7 +466,6 @@ public async Task DeleteFileAsBlobMetadataListAsync() { item.Should().BeFalse(); } - } [Fact] @@ -550,20 +474,15 @@ public async Task DeleteFileAsBlobMetadataAsync() const string uploadContent = $"test {nameof(DeleteFileAsBlobMetadataAsync)}"; const string fileName = $"{nameof(DeleteFileAsBlobMetadataAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Get file as BlobMetadata var blobMetadata = await Storage.GetBlobAsync(fileName); - //Delete BlobMetadata await Storage.DeleteAsync(blobMetadata); - //Check is exists file var result = await Storage.ExistsAsync(fileName); result.Should().BeFalse(); - } [Fact] @@ -572,13 +491,10 @@ public async Task DeleteFileAsStringAsync() const string uploadContent = $"test {nameof(DeleteFileAsStringAsync)}"; const string fileName = $"{nameof(DeleteFileAsStringAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Delete file await Storage.DeleteAsync(fileName); - //Check is exists file var result = await Storage.ExistsAsync(fileName); result.Should().BeFalse(); @@ -594,15 +510,12 @@ public async Task SingleBlobExistsAsync() const string uploadContent = $"test {nameof(SingleBlobExistsAsync)}"; const string fileName = $"{nameof(SingleBlobExistsAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); - //Check is exist file var result = await Storage.ExistsAsync(fileName); result.Should().BeTrue(); - //Delete file await Storage.DeleteAsync(fileName); } @@ -612,7 +525,6 @@ public async Task ExistFileByBlobMetadataAsync() const string uploadContent = $"test {nameof(ExistFileByBlobMetadataAsync)}"; const string fileName = $"{nameof(ExistFileByBlobMetadataAsync)}.txt"; - //Upload file await PrepareFileToTest(uploadContent, fileName); var file = new BlobMetadata @@ -620,25 +532,21 @@ public async Task ExistFileByBlobMetadataAsync() Name = fileName }; - //Get file by BlobMetadata var result = await Storage.ExistsAsync(file); result.Should().BeTrue(); - //Delete file await Storage.DeleteAsync(fileName); } [Fact] public async Task ExistFileByListStringAsync() { - //Create list fileName and uploadData var listFile = new List<(string FileName, string UploadedContent)>(); listFile.Add(($"{nameof(ExistFileByListStringAsync)}1.txt", $"test {nameof(ExistFileByListStringAsync)}1")); listFile.Add(($"{nameof(ExistFileByListStringAsync)}2.txt", $"test {nameof(ExistFileByListStringAsync)}2")); listFile.Add(($"{nameof(ExistFileByListStringAsync)}3.txt", $"test {nameof(ExistFileByListStringAsync)}3")); - // Upload files to server foreach (var item in listFile) { await PrepareFileToTest(item.UploadedContent, item.FileName); @@ -648,7 +556,6 @@ public async Task ExistFileByListStringAsync() blobList.Add($"{nameof(ExistFileByListStringAsync)}1.txt"); blobList.Add($"{nameof(ExistFileByListStringAsync)}2.txt"); - //Check files is exist var result = Storage.ExistsAsync(blobList); var resultList = await result.ToListAsync(); @@ -658,7 +565,6 @@ public async Task ExistFileByListStringAsync() item.Should().BeTrue(); } - // Delete files from server foreach (var item in listFile) { await DeleteFileAsync(item.FileName); @@ -668,19 +574,16 @@ public async Task ExistFileByListStringAsync() [Fact] public async Task ExistFileByListBlobMetadataAsync() { - //Create list fileName and uploadData var listFile = new List<(string FileName, string UploadedContent)>(); listFile.Add(($"{nameof(ExistFileByListBlobMetadataAsync)}1.txt", $"test {nameof(ExistFileByListBlobMetadataAsync)}1")); listFile.Add(($"{nameof(ExistFileByListBlobMetadataAsync)}2.txt", $"test {nameof(ExistFileByListBlobMetadataAsync)}2")); listFile.Add(($"{nameof(ExistFileByListBlobMetadataAsync)}3.txt", $"test {nameof(ExistFileByListBlobMetadataAsync)}3")); - // Upload files to server foreach (var item in listFile) { await PrepareFileToTest(item.UploadedContent, item.FileName); } - //Check files is exist var result = Storage.ExistsAsync(listFile.Select(x => new BlobMetadata { Name = x.FileName })); var resultList = await result.ToListAsync(); @@ -690,7 +593,6 @@ public async Task ExistFileByListBlobMetadataAsync() item.Should().BeTrue(); } - // Delete files from server foreach (var item in listFile) { await DeleteFileAsync(item.FileName); @@ -707,7 +609,6 @@ private async Task PrepareFileToTest(string content, string fileName) } await Storage.UploadAsync(fileName, content); - } private async Task DeleteFileAsync(string fileName) @@ -720,11 +621,9 @@ private async Task DeleteFileAsync(string fileName) private async Task DownloadAsync(string fileName) { - //Download file var stream = await Storage.DownloadAsStreamAsync(fileName); var sr = new StreamReader(stream, Encoding.UTF8); - //Get content from file as string return await sr.ReadToEndAsync(); } From 4559699b7d4c2e001329f555bea619eeba17b549 Mon Sep 17 00:00:00 2001 From: Ruslan Dudchenko Date: Mon, 21 Mar 2022 23:28:02 +0200 Subject: [PATCH 2/4] added memory test --- ManagedCode.Storage.Tests/StorageBaseTests.cs | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/ManagedCode.Storage.Tests/StorageBaseTests.cs b/ManagedCode.Storage.Tests/StorageBaseTests.cs index 31471538..0e90e126 100644 --- a/ManagedCode.Storage.Tests/StorageBaseTests.cs +++ b/ManagedCode.Storage.Tests/StorageBaseTests.cs @@ -1,5 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Text; @@ -27,33 +27,34 @@ protected StorageBaseTests() #region MemoryPayload - //[Fact] - //public async Task WhenBigFilesUpload() - //{ - // var directory = Path.Combine(Environment.CurrentDirectory, "managed-code-bucket"); - - // var bigFiles = new List() - // { - // GetLocalFile($"{directory}/{nameof(WhenBigFilesUpload)}_1.txt", 100 * 1024 * 1024), - // GetLocalFile($"{directory}/{nameof(WhenBigFilesUpload)}_2.txt", 100 * 1024 * 1024), - // GetLocalFile($"{directory}/{nameof(WhenBigFilesUpload)}_3.txt", 100 * 1024 * 1024) - // }; - - // foreach (var localFile in bigFiles) - // { - // await Storage.UploadStreamAsync(localFile.FileName, localFile.FileStream); - // } - - // //foreach (var localFile in bigFiles) - // //{ - // // await Storage.DeleteAsync(localFile.FileName); - // //} - - // //foreach (var localFile in bigFiles) - // //{ - // // localFile.Dispose(); - // //} - //} + [Fact] + public async Task UploadBigFilesAsync() + { + const int fileSize = 70 * 1024 * 1024; + + var bigFiles = new List() + { + GetLocalFile(fileSize), + GetLocalFile(fileSize), + GetLocalFile(fileSize) + }; + + foreach (var localFile in bigFiles) + { + await Storage.UploadStreamAsync(localFile.FileName, localFile.FileStream); + await localFile.DisposeAsync(); + } + + Process currentProcess = Process.GetCurrentProcess(); + long totalBytesOfMemoryUsed = currentProcess.WorkingSet64; + + totalBytesOfMemoryUsed.Should().BeLessThan(3 * fileSize); + + foreach (var localFile in bigFiles) + { + await Storage.DeleteAsync(localFile.FileName); + } + } #endregion @@ -728,14 +729,14 @@ private async Task DownloadAsync(string fileName) return await sr.ReadToEndAsync(); } - private LocalFile GetLocalFile(string fileName, int byteSize) + private LocalFile GetLocalFile(int byteSize) { - var localFile = new LocalFile(fileName); + var localFile = new LocalFile(); var fs = localFile.FileStream; fs.Seek(byteSize, SeekOrigin.Begin); fs.WriteByte(0); - fs.Close(); + fs.Dispose(); return localFile; } From f48c7fbd401cb29353b72cb34ff88e84500c8262 Mon Sep 17 00:00:00 2001 From: Vitaliy Basanets Date: Mon, 21 Mar 2022 23:54:19 +0200 Subject: [PATCH 3/4] added createcontainer method --- ManagedCode.Storage.Aws/AWSStorage.cs | 10 +++++ ManagedCode.Storage.Azure/AzureStorage.cs | 25 +++++++++++-- ManagedCode.Storage.Core/IStorage.cs | 2 + .../FileSystemStorage.cs | 15 ++++++++ ManagedCode.Storage.Gcp/GCPStorage.cs | 37 +++++++++++++++---- 5 files changed, 78 insertions(+), 11 deletions(-) diff --git a/ManagedCode.Storage.Aws/AWSStorage.cs b/ManagedCode.Storage.Aws/AWSStorage.cs index f72f0906..e22d8632 100644 --- a/ManagedCode.Storage.Aws/AWSStorage.cs +++ b/ManagedCode.Storage.Aws/AWSStorage.cs @@ -316,4 +316,14 @@ private async Task UploadStreamInternalAsync(string blobName, Stream dataStream, } #endregion + + #region CreateContainer + + public async Task CreateContainerAsync() + { + await _s3Client.EnsureBucketExistsAsync(_bucket); + } + + #endregion + } \ No newline at end of file diff --git a/ManagedCode.Storage.Azure/AzureStorage.cs b/ManagedCode.Storage.Azure/AzureStorage.cs index 7a35727a..72fd1116 100644 --- a/ManagedCode.Storage.Azure/AzureStorage.cs +++ b/ManagedCode.Storage.Azure/AzureStorage.cs @@ -15,22 +15,24 @@ namespace ManagedCode.Storage.Azure; public class AzureStorage : IAzureStorage { - private readonly BlobContainerClient _blobContainerClient; + private BlobContainerClient _blobContainerClient; + private readonly AzureStorageOptions _options; public AzureStorage(AzureStorageOptions options) { + _options = options; _blobContainerClient = new BlobContainerClient( options.ConnectionString, options.Container, options.OriginalOptions ); - if (options.ShouldCreateIfNotExists) + _blobContainerClient.SetAccessPolicy(_options.PublicAccessType); + + if (_options.ShouldCreateIfNotExists) { _blobContainerClient.CreateIfNotExists(PublicAccessType.BlobContainer); } - - _blobContainerClient.SetAccessPolicy(options.PublicAccessType); } public void Dispose() @@ -246,4 +248,19 @@ public async Task UploadAsync(Stream dataStream, CancellationToken cance } #endregion + + #region CreateContainer + + public async Task CreateContainerAsync() + { + await _blobContainerClient.SetAccessPolicyAsync(_options.PublicAccessType); + + if (_options.ShouldCreateIfNotExists) + { + await _blobContainerClient.CreateIfNotExistsAsync(PublicAccessType.BlobContainer); + } + } + + #endregion + } \ No newline at end of file diff --git a/ManagedCode.Storage.Core/IStorage.cs b/ManagedCode.Storage.Core/IStorage.cs index 7568bb28..bc295610 100644 --- a/ManagedCode.Storage.Core/IStorage.cs +++ b/ManagedCode.Storage.Core/IStorage.cs @@ -37,4 +37,6 @@ public interface IStorage : IDisposable Task ExistsAsync(BlobMetadata blobMetadata, CancellationToken cancellationToken = default); IAsyncEnumerable ExistsAsync(IEnumerable blobNames, CancellationToken cancellationToken = default); IAsyncEnumerable ExistsAsync(IEnumerable blobs, CancellationToken cancellationToken = default); + + Task CreateContainerAsync(); } \ No newline at end of file diff --git a/ManagedCode.Storage.FileSystem/FileSystemStorage.cs b/ManagedCode.Storage.FileSystem/FileSystemStorage.cs index c11340d1..bf32f4f8 100644 --- a/ManagedCode.Storage.FileSystem/FileSystemStorage.cs +++ b/ManagedCode.Storage.FileSystem/FileSystemStorage.cs @@ -256,4 +256,19 @@ public async Task UploadAsync(Stream dataStream, CancellationToken cance } #endregion + + #region CreateContainer + + public async Task CreateContainerAsync() + { + await Task.Yield(); + + if (!Directory.Exists(_path)) + { + Directory.CreateDirectory(_path); + } + } + + #endregion + } \ No newline at end of file diff --git a/ManagedCode.Storage.Gcp/GCPStorage.cs b/ManagedCode.Storage.Gcp/GCPStorage.cs index c4e0bea3..0230d580 100644 --- a/ManagedCode.Storage.Gcp/GCPStorage.cs +++ b/ManagedCode.Storage.Gcp/GCPStorage.cs @@ -18,29 +18,32 @@ public class GCPStorage : IGCPStorage { private readonly string _bucket; private readonly StorageClient _storageClient; + private readonly GCPStorageOptions _gcpStorageOptions; public GCPStorage(GCPStorageOptions gcpStorageOptions) { - _bucket = gcpStorageOptions.BucketOptions.Bucket; + _gcpStorageOptions = gcpStorageOptions; - if (gcpStorageOptions.StorageClientBuilder != null) + _bucket = _gcpStorageOptions.BucketOptions.Bucket; + + if (_gcpStorageOptions.StorageClientBuilder != null) { - _storageClient = gcpStorageOptions.StorageClientBuilder.Build(); + _storageClient = _gcpStorageOptions.StorageClientBuilder.Build(); } - else if (gcpStorageOptions.GoogleCredential != null) + else if (_gcpStorageOptions.GoogleCredential != null) { _storageClient = StorageClient.Create(gcpStorageOptions.GoogleCredential); } try { - if (gcpStorageOptions.OriginalOptions != null) + if (_gcpStorageOptions.OriginalOptions != null) { - _storageClient.CreateBucket(gcpStorageOptions.BucketOptions.ProjectId, _bucket, gcpStorageOptions.OriginalOptions); + _storageClient.CreateBucket(_gcpStorageOptions.BucketOptions.ProjectId, _bucket, _gcpStorageOptions.OriginalOptions); } else { - _storageClient.CreateBucket(gcpStorageOptions.BucketOptions.ProjectId, _bucket); + _storageClient.CreateBucket(_gcpStorageOptions.BucketOptions.ProjectId, _bucket); } } catch @@ -263,4 +266,24 @@ private async Task UploadStreamInternalAsync(string blobName, Stream dataStream, } #endregion + + #region CreateContainer + public async Task CreateContainerAsync() + { + try + { + if (_gcpStorageOptions.OriginalOptions != null) + { + await _storageClient.CreateBucketAsync(_gcpStorageOptions.BucketOptions.ProjectId, _bucket, _gcpStorageOptions.OriginalOptions); + } + else + { + await _storageClient.CreateBucketAsync(_gcpStorageOptions.BucketOptions.ProjectId, _bucket); + } + } + catch + { + } + } + #endregion } \ No newline at end of file From ea9207607428461789ca0517ae1fd94262d703dd Mon Sep 17 00:00:00 2001 From: Vitaliy Basanets Date: Mon, 21 Mar 2022 23:59:56 +0200 Subject: [PATCH 4/4] change azurestorage --- ManagedCode.Storage.Azure/AzureStorage.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ManagedCode.Storage.Azure/AzureStorage.cs b/ManagedCode.Storage.Azure/AzureStorage.cs index 72fd1116..41871ca0 100644 --- a/ManagedCode.Storage.Azure/AzureStorage.cs +++ b/ManagedCode.Storage.Azure/AzureStorage.cs @@ -27,12 +27,13 @@ public AzureStorage(AzureStorageOptions options) options.OriginalOptions ); - _blobContainerClient.SetAccessPolicy(_options.PublicAccessType); if (_options.ShouldCreateIfNotExists) { _blobContainerClient.CreateIfNotExists(PublicAccessType.BlobContainer); } + + _blobContainerClient.SetAccessPolicy(_options.PublicAccessType); } public void Dispose() @@ -253,12 +254,13 @@ public async Task UploadAsync(Stream dataStream, CancellationToken cance public async Task CreateContainerAsync() { - await _blobContainerClient.SetAccessPolicyAsync(_options.PublicAccessType); if (_options.ShouldCreateIfNotExists) { await _blobContainerClient.CreateIfNotExistsAsync(PublicAccessType.BlobContainer); } + + await _blobContainerClient.SetAccessPolicyAsync(_options.PublicAccessType); } #endregion