@@ -16,6 +16,7 @@ import (
16
16
"github.com/qiniu/go-sdk/v7/storagev2/apis"
17
17
"github.com/qiniu/go-sdk/v7/storagev2/http_client"
18
18
"github.com/qiniu/go-sdk/v7/storagev2/region"
19
+ "github.com/qiniu/go-sdk/v7/storagev2/uplog"
19
20
)
20
21
21
22
// ResumeUploader 表示一个分片上传的对象
@@ -135,17 +136,22 @@ func (p *ResumeUploader) rput(ctx context.Context, ret interface{}, upToken stri
135
136
extra .init ()
136
137
137
138
var (
139
+ bucket string
138
140
recorderKey string
139
141
fileInfo os.FileInfo = nil
140
142
)
141
143
if fileDetails != nil {
142
144
fileInfo = fileDetails .fileInfo
143
145
}
144
146
147
+ if _ , bucket , err = getAkBucketFromUploadToken (upToken ); err != nil {
148
+ return
149
+ }
150
+
145
151
recorderKey = getRecorderKey (extra .Recorder , upToken , key , "v1" , blockSize , fileDetails )
146
152
147
153
return uploadByWorkers (
148
- newResumeUploaderImpl (p , key , hasKey , upToken , makeEndpointsFromUpHost (extra .UpHost ), fileInfo , extra , ret , recorderKey ),
154
+ newResumeUploaderImpl (p , bucket , key , hasKey , upToken , makeEndpointsFromUpHost (extra .UpHost ), fileInfo , extra , ret , recorderKey ),
149
155
ctx , newSizedChunkReader (f , fsize , blockSize ))
150
156
}
151
157
@@ -155,8 +161,14 @@ func (p *ResumeUploader) rputWithoutSize(ctx context.Context, ret interface{}, u
155
161
}
156
162
extra .init ()
157
163
164
+ var bucket string
165
+
166
+ if _ , bucket , err = getAkBucketFromUploadToken (upToken ); err != nil {
167
+ return
168
+ }
169
+
158
170
return uploadByWorkers (
159
- newResumeUploaderImpl (p , key , hasKey , upToken , makeEndpointsFromUpHost (extra .UpHost ), nil , extra , ret , "" ),
171
+ newResumeUploaderImpl (p , bucket , key , hasKey , upToken , makeEndpointsFromUpHost (extra .UpHost ), nil , extra , ret , "" ),
160
172
ctx , newUnsizedChunkReader (r , 1 << blockBits ))
161
173
}
162
174
@@ -211,6 +223,7 @@ type (
211
223
resumeUploaderImpl struct {
212
224
cfg * Config
213
225
storage * apis.Storage
226
+ bucket string
214
227
key string
215
228
hasKey bool
216
229
upToken string
@@ -241,7 +254,7 @@ type (
241
254
}
242
255
)
243
256
244
- func newResumeUploaderImpl (resumeUploader * ResumeUploader , key string , hasKey bool , upToken string , upEndpoints region.EndpointsProvider , fileInfo os.FileInfo , extra * RputExtra , ret interface {}, recorderKey string ) * resumeUploaderImpl {
257
+ func newResumeUploaderImpl (resumeUploader * ResumeUploader , bucket , key string , hasKey bool , upToken string , upEndpoints region.EndpointsProvider , fileInfo os.FileInfo , extra * RputExtra , ret interface {}, recorderKey string ) * resumeUploaderImpl {
245
258
opts := http_client.Options {
246
259
BasicHTTPClient : resumeUploader .Client .Client ,
247
260
UseInsecureProtocol : ! resumeUploader .Cfg .UseHTTPS ,
@@ -261,6 +274,7 @@ func newResumeUploaderImpl(resumeUploader *ResumeUploader, key string, hasKey bo
261
274
}
262
275
return & resumeUploaderImpl {
263
276
cfg : resumeUploader .Cfg ,
277
+ bucket : bucket ,
264
278
key : key ,
265
279
hasKey : hasKey ,
266
280
upToken : upToken ,
@@ -279,17 +293,16 @@ func newResumeUploaderImpl(resumeUploader *ResumeUploader, key string, hasKey bo
279
293
}
280
294
}
281
295
282
- func (impl * resumeUploaderImpl ) initUploader (ctx context.Context ) ([]int64 , error ) {
283
- var recovered []int64
296
+ func (impl * resumeUploaderImpl ) initUploader (ctx context.Context ) (recovered []int64 , recoveredSize int64 , err error ) {
284
297
if impl .extra .Recorder != nil && len (impl .recorderKey ) > 0 {
285
298
if recorderData , err := impl .extra .Recorder .Get (impl .recorderKey ); err == nil {
286
- recovered = impl .recover (ctx , recorderData )
299
+ recovered , recoveredSize = impl .recover (ctx , recorderData )
287
300
if len (recovered ) == 0 {
288
301
impl .deleteUploadRecordIfNeed (nil , true )
289
302
}
290
303
}
291
304
}
292
- return recovered , nil
305
+ return
293
306
}
294
307
295
308
func (impl * resumeUploaderImpl ) uploadChunk (ctx context.Context , c chunk ) error {
@@ -384,21 +397,37 @@ func (impl *resumeUploaderImpl) final(ctx context.Context) error {
384
397
return err
385
398
}
386
399
400
+ func (impl * resumeUploaderImpl ) version () uplog.UpApiVersion {
401
+ return uplog .UpApiVersionV1
402
+ }
403
+
404
+ func (impl * resumeUploaderImpl ) getUpToken () string {
405
+ return impl .upToken
406
+ }
407
+
408
+ func (impl * resumeUploaderImpl ) getBucket () string {
409
+ return impl .bucket
410
+ }
411
+
412
+ func (impl * resumeUploaderImpl ) getKey () (string , bool ) {
413
+ return impl .key , impl .hasKey
414
+ }
415
+
387
416
func (impl * resumeUploaderImpl ) deleteUploadRecordIfNeed (err error , force bool ) {
388
417
// 无效删除之前的记录
389
418
if force || (isContextExpiredError (err ) && impl .extra .Recorder != nil && len (impl .recorderKey ) > 0 ) {
390
419
_ = impl .extra .Recorder .Delete (impl .recorderKey )
391
420
}
392
421
}
393
422
394
- func (impl * resumeUploaderImpl ) recover (ctx context.Context , recoverData []byte ) (recovered []int64 ) {
423
+ func (impl * resumeUploaderImpl ) recover (ctx context.Context , recoverData []byte ) (recovered []int64 , recoveredSize int64 ) {
395
424
var recoveryInfo resumeUploaderRecoveryInfo
396
425
if err := json .Unmarshal (recoverData , & recoveryInfo ); err != nil {
397
- return nil
426
+ return
398
427
}
399
428
if impl .fileInfo == nil || recoveryInfo .FileSize != impl .fileInfo .Size () ||
400
429
recoveryInfo .ModTimeStamp != impl .fileInfo .ModTime ().UnixNano () {
401
- return nil
430
+ return
402
431
}
403
432
if recoveryInfo .RecorderVersion != uploadRecordVersion {
404
433
return
@@ -407,17 +436,18 @@ func (impl *resumeUploaderImpl) recover(ctx context.Context, recoverData []byte)
407
436
for _ , c := range recoveryInfo .Contexts {
408
437
if isUploadContextExpired (c .ExpiredAt ) {
409
438
// 有一个过期,最终其实都会无效,重传最后之前没过期的也可能会过期
410
- return nil
439
+ return nil , 0
411
440
}
412
441
413
442
impl .fileSize += int64 (c .ChunkSize )
443
+ recoveredSize += int64 (c .ChunkSize )
414
444
impl .extra .Progresses = append (impl .extra .Progresses , BlkputRet {
415
445
blkIdx : c .Idx , fileOffset : c .Offset , chunkSize : c .ChunkSize , Ctx : c .Ctx , ExpiredAt : c .ExpiredAt ,
416
446
})
417
447
recovered = append (recovered , c .Offset )
418
448
}
419
449
420
- return recovered
450
+ return recovered , recoveredSize
421
451
}
422
452
423
453
func (impl * resumeUploaderImpl ) save (ctx context.Context ) {
0 commit comments