@@ -14,29 +14,19 @@ function ResumeUploader(config) {
1414}
1515
1616// 上传可选参数
17- // @params fname 请求体中的文件的名称
18- // @params params 额外参数设置,参数名称必须以x:开头
19- // @param mimeType 指定文件的mimeType
17+ // @params fname 请求体中的文件的名称
18+ // @params params 额外参数设置,参数名称必须以x:开头
19+ // @param mimeType 指定文件的mimeType
20+ // @param resumeRecordFile 断点续传的已上传的部分信息记录文件
2021// @param progressCallback(BlkputRet) 上传进度回调
21- // @param ctxList 断点续传的已上传的文件ctx列表,
22- // 在上传的过程中可以在progressCallback中写入本地文件
23- function PutExtra ( fname , params , mimeType , blkputRets , progressCallback ) {
22+ function PutExtra ( fname , params , mimeType , resumeRecordFile , progressCallback ) {
2423 this . fname = fname || '' ;
2524 this . params = params || { } ;
2625 this . mimeType = mimeType || null ;
27- this . blkputRets = blkputRets || [ ] ;
26+ this . resumeRecordFile = resumeRecordFile || null ;
2827 this . progressCallback = progressCallback || null ;
2928}
3029
31- function BlkputRet ( options ) {
32- this . ctx = options . ctx || null ;
33- this . checksum = options . checksum || null ;
34- this . crc32 = options . crc32 || null ;
35- this . offset = options . offset || null ;
36- this . host = options . host || null ;
37- this . expired_at = options . expired_at || null ;
38- }
39-
4030ResumeUploader . prototype . putStream = function ( uploadToken , key , rsStream ,
4131 rsStreamLen , putExtra , callbackFunc ) {
4232 putExtra = putExtra || new PutExtra ( ) ;
@@ -128,23 +118,28 @@ function putReq(config, uploadToken, key, rsStream, rsStreamLen, putExtra,
128118 var readLen = 0 ;
129119 var readBuffers = [ ] ;
130120 var finishedCtxList = [ ] ;
121+ var finishedBlkPutRets = [ ] ;
122+ //read resumeRecordFile
123+ if ( putExtra . resumeRecordFile ) {
124+ try {
125+ var resumeRecords = fs . readFileSync ( putExtra . resumeRecordFile ) . toString ( ) ;
126+ var blkputRets = JSON . parse ( resumeRecords ) ;
131127
132- //check putExtra.blkputRets
133- if ( putExtra . blkputRets ) {
134- for ( var index = 0 ; index < putExtra . blkputRets . length ; index ++ ) {
135- //check ctx expired or not
136- var blkputRet = putExtra . blkputRets [ index ] ;
137- var expiredAt = blkputRet . expired_at ;
138- //make sure the ctx at least has one day expiration
139- expiredAt += 3600 * 24 ;
140- if ( util . isTimestampExpired ( expiredAt ) ) {
141- //discard these ctxs
142- break ;
143- }
128+ for ( var index = 0 ; index < blkputRets . length ; index ++ ) {
129+ //check ctx expired or not
130+ var blkputRet = blkputRets [ index ] ;
131+ var expiredAt = blkputRet . expired_at ;
132+ //make sure the ctx at least has one day expiration
133+ expiredAt += 3600 * 24 ;
134+ if ( util . isTimestampExpired ( expiredAt ) ) {
135+ //discard these ctxs
136+ break ;
137+ }
144138
145- finishedBlock += 1 ;
146- finishedCtxList . push ( blkputRet . ctx ) ;
147- }
139+ finishedBlock += 1 ;
140+ finishedCtxList . push ( blkputRet . ctx ) ;
141+ }
142+ } catch ( e ) { }
148143 }
149144
150145 //check when to mkblk
@@ -170,9 +165,17 @@ function putReq(config, uploadToken, key, rsStream, rsStreamLen, putExtra,
170165 rsStream . resume ( ) ;
171166 var blkputRet = respBody ;
172167 finishedCtxList . push ( blkputRet . ctx ) ;
168+ finishedBlkPutRets . push ( blkputRet ) ;
173169 if ( putExtra . progressCallback ) {
174170 putExtra . progressCallback ( blkputRet ) ;
175171 }
172+ if ( putExtra . resumeRecordFile ) {
173+ var contents = JSON . stringify ( finishedBlkPutRets ) ;
174+ console . log ( "write resume record " + putExtra . resumeRecordFile )
175+ fs . writeFileSync ( putExtra . resumeRecordFile , contents , {
176+ encoding : 'utf-8'
177+ } ) ;
178+ }
176179 }
177180 } ) ;
178181 }
@@ -226,7 +229,15 @@ function mkfileReq(upDomain, uploadToken, fileSize, ctxList, key, putExtra,
226229 'Content-Type' : 'application/octet-stream'
227230 }
228231 var postBody = ctxList . join ( "," ) ;
229- rpc . post ( requestURI , postBody , headers , callbackFunc ) ;
232+ rpc . post ( requestURI , postBody , headers , function ( err , ret , info ) {
233+ if ( info . statusCode == 200 || info . statusCode == 701 ||
234+ info . statusCode == 401 ) {
235+ if ( putExtra . resumeRecordFile ) {
236+ fs . unlinkSync ( putExtra . resumeRecordFile ) ;
237+ }
238+ }
239+ callbackFunc ( err , ret , info ) ;
240+ } ) ;
230241}
231242
232243ResumeUploader . prototype . putFile = function ( uploadToken , key , localFile ,
0 commit comments