55using System . Text ;
66using System . Threading ;
77using System . Threading . Tasks ;
8+ using Azure ;
89using Azure . Storage . Blobs ;
910using Azure . Storage . Blobs . Models ;
1011using ManagedCode . Storage . Azure . Options ;
@@ -26,14 +27,6 @@ public AzureStorage(AzureStorageOptions options)
2627 options . Container ,
2728 options . OriginalOptions
2829 ) ;
29-
30-
31- if ( _options . ShouldCreateIfNotExists )
32- {
33- _blobContainerClient . CreateIfNotExists ( PublicAccessType . BlobContainer ) ;
34- }
35-
36- _blobContainerClient . SetAccessPolicy ( _options . PublicAccessType ) ;
3730 }
3831
3932 public void Dispose ( )
@@ -188,13 +181,31 @@ public async IAsyncEnumerable<BlobMetadata> GetBlobListAsync(CancellationToken c
188181 public async Task UploadStreamAsync ( string blobName , Stream dataStream , CancellationToken cancellationToken = default )
189182 {
190183 var blobClient = _blobContainerClient . GetBlobClient ( blobName ) ;
191- await blobClient . UploadAsync ( dataStream , cancellationToken ) ;
184+
185+ try
186+ {
187+ await blobClient . UploadAsync ( dataStream , cancellationToken ) ;
188+ }
189+ catch ( RequestFailedException )
190+ {
191+ await CreateContainerAsync ( ) ;
192+ await blobClient . UploadAsync ( dataStream , cancellationToken ) ;
193+ }
192194 }
193195
194196 public async Task UploadAsync ( string blobName , string content , CancellationToken cancellationToken = default )
195197 {
196198 var blobClient = _blobContainerClient . GetBlobClient ( blobName ) ;
197- await blobClient . UploadAsync ( BinaryData . FromString ( content ) , cancellationToken ) ;
199+
200+ try
201+ {
202+ await blobClient . UploadAsync ( BinaryData . FromString ( content ) , cancellationToken ) ;
203+ }
204+ catch ( RequestFailedException )
205+ {
206+ await CreateContainerAsync ( ) ;
207+ await blobClient . UploadAsync ( BinaryData . FromString ( content ) , cancellationToken ) ;
208+ }
198209 }
199210
200211 public async Task UploadFileAsync ( string blobName , string pathToFile , CancellationToken cancellationToken = default )
@@ -203,7 +214,15 @@ public async Task UploadFileAsync(string blobName, string pathToFile, Cancellati
203214
204215 using ( var fs = new FileStream ( pathToFile , FileMode . Open , FileAccess . Read ) )
205216 {
206- await blobClient . UploadAsync ( fs , cancellationToken ) ;
217+ try
218+ {
219+ await blobClient . UploadAsync ( fs , cancellationToken ) ;
220+ }
221+ catch ( RequestFailedException )
222+ {
223+ await CreateContainerAsync ( ) ;
224+ await blobClient . UploadAsync ( fs , cancellationToken ) ;
225+ }
207226 }
208227 }
209228
@@ -225,25 +244,51 @@ public async Task UploadAsync(BlobMetadata blobMetadata, string content, Cancell
225244 public async Task UploadAsync ( BlobMetadata blobMetadata , byte [ ] data , CancellationToken cancellationToken = default )
226245 {
227246 var blobClient = _blobContainerClient . GetBlobClient ( blobMetadata . Name ) ;
228- await blobClient . UploadAsync ( BinaryData . FromBytes ( data ) , cancellationToken ) ;
247+
248+ try
249+ {
250+ await blobClient . UploadAsync ( BinaryData . FromBytes ( data ) , cancellationToken ) ;
251+ }
252+ catch ( RequestFailedException )
253+ {
254+ await CreateContainerAsync ( ) ;
255+ await blobClient . UploadAsync ( BinaryData . FromBytes ( data ) , cancellationToken ) ;
256+ }
229257 }
230258
231259 public async Task < string > UploadAsync ( string content , CancellationToken cancellationToken = default )
232260 {
233261 string fileName = $ "{ Guid . NewGuid ( ) . ToString ( "N" ) . ToLowerInvariant ( ) } .txt";
234262
235263 var blobClient = _blobContainerClient . GetBlobClient ( fileName ) ;
236- await blobClient . UploadAsync ( BinaryData . FromString ( content ) , cancellationToken ) ;
237264
265+ try
266+ {
267+ await blobClient . UploadAsync ( BinaryData . FromString ( content ) , cancellationToken ) ;
268+ }
269+ catch ( RequestFailedException )
270+ {
271+ await CreateContainerAsync ( ) ;
272+ await blobClient . UploadAsync ( BinaryData . FromString ( content ) , cancellationToken ) ;
273+ }
274+
238275 return fileName ;
239276 }
240277
241278 public async Task < string > UploadAsync ( Stream dataStream , CancellationToken cancellationToken = default )
242279 {
243- string fileName = Guid . NewGuid ( ) . ToString ( "N" ) . ToLowerInvariant ( ) ;
244-
280+ var fileName = Guid . NewGuid ( ) . ToString ( "N" ) . ToLowerInvariant ( ) ;
245281 var blobClient = _blobContainerClient . GetBlobClient ( fileName ) ;
246- await blobClient . UploadAsync ( dataStream , cancellationToken ) ;
282+
283+ try
284+ {
285+ await blobClient . UploadAsync ( dataStream , cancellationToken ) ;
286+ }
287+ catch ( RequestFailedException )
288+ {
289+ await CreateContainerAsync ( ) ;
290+ await blobClient . UploadAsync ( dataStream , cancellationToken ) ;
291+ }
247292
248293 return fileName ;
249294 }
@@ -252,17 +297,15 @@ public async Task<string> UploadAsync(Stream dataStream, CancellationToken cance
252297
253298 #region CreateContainer
254299
255- public async Task CreateContainerAsync ( )
300+ public async Task CreateContainerAsync ( CancellationToken cancellationToken = default )
256301 {
257-
258302 if ( _options . ShouldCreateIfNotExists )
259303 {
260- await _blobContainerClient . CreateIfNotExistsAsync ( PublicAccessType . BlobContainer ) ;
304+ await _blobContainerClient . CreateIfNotExistsAsync ( PublicAccessType . BlobContainer , cancellationToken : cancellationToken ) ;
261305 }
262306
263307 await _blobContainerClient . SetAccessPolicyAsync ( _options . PublicAccessType ) ;
264308 }
265309
266310 #endregion
267-
268311}
0 commit comments