1+ using System ;
12using System . Collections . Generic ;
23using System . Runtime . CompilerServices ;
34using System . Threading ;
@@ -28,7 +29,27 @@ public static async Task<Result<BlobMetadata>> UploadToStorageAsync(this IStorag
2829 return await storage . UploadAsync ( localFile . FileInfo , options , cancellationToken ) ;
2930 }
3031
31- using ( var stream = formFile . OpenReadStream ( ) )
32+ await using ( var stream = formFile . OpenReadStream ( ) )
33+ {
34+ return await storage . UploadAsync ( stream , options , cancellationToken ) ;
35+ }
36+ }
37+
38+ public static async Task < Result < BlobMetadata > > UploadToStorageAsync ( this IStorage storage ,
39+ IFormFile formFile ,
40+ Action < UploadOptions > options ,
41+ CancellationToken cancellationToken = default )
42+ {
43+ var newOptions = new UploadOptions ( formFile . FileName , mimeType : formFile . ContentType ) ;
44+ options . Invoke ( newOptions ) ;
45+
46+ if ( formFile . Length > MinLengthForLargeFile )
47+ {
48+ var localFile = await formFile . ToLocalFileAsync ( cancellationToken ) ;
49+ return await storage . UploadAsync ( localFile . FileInfo , options , cancellationToken ) ;
50+ }
51+
52+ await using ( var stream = formFile . OpenReadStream ( ) )
3253 {
3354 return await storage . UploadAsync ( stream , options , cancellationToken ) ;
3455 }
@@ -44,6 +65,17 @@ public static async IAsyncEnumerable<Result<BlobMetadata>> UploadToStorageAsync(
4465 yield return await storage . UploadToStorageAsync ( formFile , options , cancellationToken ) ;
4566 }
4667 }
68+
69+ public static async IAsyncEnumerable < Result < BlobMetadata > > UploadToStorageAsync ( this IStorage storage ,
70+ IFormFileCollection formFiles ,
71+ Action < UploadOptions > options ,
72+ [ EnumeratorCancellation ] CancellationToken cancellationToken = default )
73+ {
74+ foreach ( var formFile in formFiles )
75+ {
76+ yield return await storage . UploadToStorageAsync ( formFile , options , cancellationToken ) ;
77+ }
78+ }
4779
4880 public static async Task < Result < FileResult > > DownloadAsFileResult ( this IStorage storage ,
4981 string blobName ,
0 commit comments