@@ -246,6 +246,12 @@ function QiniuJsSDK() {
246246 that . key_handler = typeof op . init . Key === 'function' ? op . init . Key : '' ;
247247 this . domain = op . domain ;
248248 var ctx = '' ;
249+ var speedCalInfo = {
250+ isResumeUpload : false ,
251+ resumeFilesize : 0 ,
252+ startTime : '' ,
253+ currentTime : ''
254+ } ;
249255
250256 var reset_chunk_size = function ( ) {
251257 var ie = that . detectIEVersion ( ) ;
@@ -336,11 +342,11 @@ function QiniuJsSDK() {
336342 } ) ;
337343
338344 uploader . bind ( 'BeforeUpload' , function ( up , file ) {
339-
345+ file . speed = file . speed || 0 ; // add a key named speed for file obj
340346 ctx = '' ;
341347
342348 var directUpload = function ( up , file , func ) {
343-
349+ speedCalInfo . startTime = new Date ( ) . getTime ( ) ;
344350 var multipart_params_obj ;
345351 if ( op . save_key ) {
346352 multipart_params_obj = {
@@ -392,9 +398,14 @@ function QiniuJsSDK() {
392398 if ( now - before < aDay ) {
393399 if ( localFileInfo . percent !== 100 ) {
394400 if ( file . size === localFileInfo . total ) {
401+ // 通过文件名和文件大小匹配,找到对应的 localstorage 信息,恢复进度
395402 file . percent = localFileInfo . percent ;
396403 file . loaded = localFileInfo . offset ;
397404 ctx = localFileInfo . ctx ;
405+
406+ // 计算速度时,会用到
407+ speedCalInfo . isResumeUpload = true ;
408+ speedCalInfo . resumeFilesize = localFileInfo . offset ;
398409 if ( localFileInfo . offset + blockSize > file . size ) {
399410 blockSize = file . size - localFileInfo . offset ;
400411 }
@@ -410,6 +421,7 @@ function QiniuJsSDK() {
410421 localStorage . removeItem ( file . name ) ;
411422 }
412423 }
424+ speedCalInfo . startTime = new Date ( ) . getTime ( ) ;
413425 up . setOption ( {
414426 'url' : 'http://upload.qiniu.com/mkblk/' + blockSize ,
415427 'multipart' : false ,
@@ -426,6 +438,18 @@ function QiniuJsSDK() {
426438 }
427439 } ) ;
428440
441+ uploader . bind ( 'UploadProgress' , function ( up , file ) {
442+ // 计算速度
443+
444+ speedCalInfo . currentTime = new Date ( ) . getTime ( ) ;
445+ var timeUsed = speedCalInfo . currentTime - speedCalInfo . startTime ; // ms
446+ var fileUploaded = file . loaded || 0 ;
447+ if ( speedCalInfo . isResumeUpload ) {
448+ fileUploaded = file . loaded - speedCalInfo . resumeFilesize ;
449+ }
450+ file . speed = ( fileUploaded / timeUsed * 1000 ) . toFixed ( 0 ) || 0 ; // unit: byte/s
451+ } ) ;
452+
429453 uploader . bind ( 'ChunkUploaded' , function ( up , file , info ) {
430454 var res = that . parseJSON ( info . response ) ;
431455
0 commit comments