@@ -80,7 +80,19 @@ public static FileUploader Create(IApiRequestSender requestSender)
8080 /// <returns>Task representing the upload</returns>
8181 public async Task < SaveMediaResponse > UploadFileAsync ( Stream fileStream , UploadQuery query )
8282 {
83- return await UploadFileAsync ( fileStream , query , query . OriginalFileName ?? Path . GetFileName ( query . Filepath ) ) ;
83+ return await UploadFileAsync ( fileStream , fileStream . Length , query ) ;
84+ }
85+
86+ /// <summary>
87+ /// Uploads a file with the data specified in query parameter
88+ /// </summary>
89+ /// <param name="fileStream">Stream of the file to upload</param>
90+ /// <param name="fileStreamLength">Length of the file stream</param>
91+ /// <param name="query">Upload query information to upload a file</param>
92+ /// <returns>Task representing the upload</returns>
93+ public async Task < SaveMediaResponse > UploadFileAsync ( Stream fileStream , long fileStreamLength , UploadQuery query )
94+ {
95+ return await UploadFileAsync ( fileStream , fileStreamLength , query , query . OriginalFileName ?? Path . GetFileName ( query . Filepath ) ) ;
8496 }
8597
8698 /// <summary>
@@ -96,31 +108,28 @@ public async Task<SaveMediaResponse> UploadFileAsync(UploadQuery query)
96108 uint chunkNumber = 0 ;
97109
98110 var fileStream = File . Open ( query . Filepath , FileMode . Open , FileAccess . Read , FileShare . ReadWrite | FileShare . Delete ) ;
99- return await UploadFileAsync ( fileStream , query , filename ) ;
100-
101-
111+ return await UploadFileAsync ( fileStream , fileStream . Length , query , filename ) ;
102112 }
103113
104114 private async Task < UploadRequest > GetUploadRequest ( string fileName )
105115 {
106116 return await RequestUploadInformationAsync ( new RequestUploadQuery { Filename = fileName } ) . ConfigureAwait ( false ) ;
107117 }
108118
109-
110- private async Task < SaveMediaResponse > UploadFileAsync ( Stream fileStream , UploadQuery query , string filename )
119+ private async Task < SaveMediaResponse > UploadFileAsync ( Stream fileStream , long fileStreamLength , UploadQuery query , string filename )
111120 {
112121 uint chunkNumber = 0 ;
113122 var uploadRequest = await GetUploadRequest ( filename ) ;
114123
115124 await using ( fileStream )
116125 {
117126 byte [ ] buffer = new byte [ CHUNK_SIZE ] ;
118- long numberOfChunks = ( fileStream . Length + buffer . Length - 1 ) / buffer . Length ;
127+ long numberOfChunks = ( fileStreamLength + buffer . Length - 1 ) / buffer . Length ;
119128 long totalBytesRead = 0 ;
120129
121- while ( totalBytesRead < fileStream . Length )
130+ while ( totalBytesRead < fileStreamLength )
122131 {
123- int bytesToRead = ( int ) Math . Min ( buffer . Length , fileStream . Length - totalBytesRead ) ;
132+ int bytesToRead = ( int ) Math . Min ( buffer . Length , fileStreamLength - totalBytesRead ) ;
124133
125134 await UploadChunkAsync ( uploadRequest , filename , fileStream , buffer , bytesToRead , numberOfChunks , ++ chunkNumber ) ;
126135
0 commit comments