@@ -76,14 +76,22 @@ public HttpResult UploadData(byte[] data, string key, string token, PutExtra ext
7676 /// <param name="token">上传凭证</param>
7777 /// <param name="extra">上传可选设置</param>
7878 /// <returns>上传数据流后的返回结果</returns>
79- public HttpResult UploadStream ( Stream stream , string key , string token , PutExtra extra )
79+ public HttpResult UploadStream ( Stream stream , string key , string token , PutExtra putExtra )
8080 {
81- if ( extra == null )
81+ if ( putExtra == null )
8282 {
83- extra = new PutExtra ( ) ;
83+ putExtra = new PutExtra ( ) ;
8484 }
85- if ( string . IsNullOrEmpty ( extra . MimeType ) ) {
86- extra . MimeType = "application/octet-stream" ;
85+ if ( string . IsNullOrEmpty ( putExtra . MimeType ) ) {
86+ putExtra . MimeType = "application/octet-stream" ;
87+ }
88+ if ( putExtra . ProgressHandler == null )
89+ {
90+ putExtra . ProgressHandler = DefaultUploadProgressHandler ;
91+ }
92+ if ( putExtra . UploadController == null )
93+ {
94+ putExtra . UploadController = DefaultUploadController ;
8795 }
8896 string fname = key ;
8997 if ( string . IsNullOrEmpty ( key ) )
@@ -115,9 +123,9 @@ public HttpResult UploadStream(Stream stream, string key, string token, PutExtra
115123 bodyBuilder . AppendLine ( "--" + boundary ) ;
116124
117125 //write extra params
118- if ( extra . Params != null && extra . Params . Count > 0 )
126+ if ( putExtra . Params != null && putExtra . Params . Count > 0 )
119127 {
120- foreach ( var p in extra . Params )
128+ foreach ( var p in putExtra . Params )
121129 {
122130 if ( p . Key . StartsWith ( "x:" ) )
123131 {
@@ -134,6 +142,7 @@ public HttpResult UploadStream(Stream stream, string key, string token, PutExtra
134142 int bufferSize = 1024 * 1024 ;
135143 byte [ ] buffer = new byte [ bufferSize ] ;
136144 int bytesRead = 0 ;
145+ putExtra . ProgressHandler ( 0 , stream . Length ) ;
137146 MemoryStream dataMS = new MemoryStream ( ) ;
138147 while ( ( bytesRead = stream . Read ( buffer , 0 , bufferSize ) ) != 0 )
139148 {
@@ -149,11 +158,11 @@ public HttpResult UploadStream(Stream stream, string key, string token, PutExtra
149158 bodyBuilder . AppendLine ( "--" + boundary ) ;
150159
151160 //write fname
152- bodyBuilder . AppendFormat ( "Content-Disposition: form-data; name=\" file\" ; filename=\" {0}\" " , fname ) ;
161+ bodyBuilder . AppendFormat ( "Content-Disposition: form-data; name=\" file\" ; filename=\" {0}\" " , fname ) ;
153162 bodyBuilder . AppendLine ( ) ;
154163
155164 //write mime type
156- bodyBuilder . AppendFormat ( "Content-Type: {0}" , extra . MimeType ) ;
165+ bodyBuilder . AppendFormat ( "Content-Type: {0}" , putExtra . MimeType ) ;
157166 bodyBuilder . AppendLine ( ) ;
158167 bodyBuilder . AppendLine ( ) ;
159168
@@ -180,8 +189,9 @@ public HttpResult UploadStream(Stream stream, string key, string token, PutExtra
180189 }
181190
182191 string uploadHost = this . config . UpHost ( ak , bucket ) ;
183-
192+ putExtra . ProgressHandler ( stream . Length / 5 , stream . Length ) ;
184193 result = httpManager . PostMultipart ( uploadHost , ms . ToArray ( ) , boundary , null ) ;
194+ putExtra . ProgressHandler ( stream . Length , stream . Length ) ;
185195 if ( result . Code == ( int ) HttpCode . OK )
186196 {
187197 result . RefText += string . Format ( "[{0}] [FormUpload] Uploaded: #STREAM# ==> \" {1}\" \n " ,
@@ -238,6 +248,32 @@ public HttpResult UploadStream(Stream stream, string key, string token, PutExtra
238248
239249 return result ;
240250 }
251+
252+ /// <summary>
253+ /// 默认的进度处理函数-上传文件
254+ /// </summary>
255+ /// <param name="uploadedBytes">已上传的字节数</param>
256+ /// <param name="totalBytes">文件总字节数</param>
257+ public static void DefaultUploadProgressHandler ( long uploadedBytes , long totalBytes )
258+ {
259+ if ( uploadedBytes < totalBytes )
260+ {
261+ Console . WriteLine ( "[{0}] [FormUpload] Progress: {1,7:0.000}%" , DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss.ffff" ) , 100.0 * uploadedBytes / totalBytes ) ;
262+ }
263+ else
264+ {
265+ Console . WriteLine ( "[{0}] [FormUpload] Progress: {1,7:0.000}%\n " , DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss.ffff" ) , 100.0 ) ;
266+ }
267+ }
268+
269+ /// <summary>
270+ /// 默认的上传控制函数,默认不执行任何控制
271+ /// </summary>
272+ /// <returns>控制状态</returns>
273+ public static UploadControllerAction DefaultUploadController ( )
274+ {
275+ return UploadControllerAction . Activated ;
276+ }
241277 }
242278
243279}
0 commit comments