@@ -54,7 +54,10 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
54
54
"dst_path" : req .Path ,
55
55
"name" : req .Name ,
56
56
"size" : req .Size ,
57
- "status" : tables .SliceUploadStatusUploading , // 只查找正在进行中的任务
57
+ "status" : []int {
58
+ tables .SliceUploadStatusWaiting , // 等待状态(重启后恢复)
59
+ tables .SliceUploadStatusUploading , // 上传中状态
60
+ },
58
61
}
59
62
if req .Hash .Md5 != "" {
60
63
wh ["hash_md5" ] = req .Hash .Md5
@@ -73,7 +76,7 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
73
76
}
74
77
75
78
if su .TaskID != "" { // 找到未完成的上传任务,支持断点续传
76
- // 验证临时文件是否仍然存在(重启后可能被清理 )
79
+ // 验证临时文件是否仍然存在(仅对非原生分片上传 )
77
80
if su .TmpFile != "" {
78
81
if _ , err := os .Stat (su .TmpFile ); os .IsNotExist (err ) {
79
82
// 临时文件丢失,清理数据库记录,重新开始
@@ -83,11 +86,12 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
83
86
}
84
87
// 继续创建新任务
85
88
} else {
86
- // 临时文件存在,可以继续断点续传
89
+ // Temporary file exists, can continue resumable upload (traditional upload mode)
87
90
session := & SliceUploadSession {SliceUpload : su }
88
91
m .cache .Store (su .TaskID , session )
89
- log .Infof ("Resuming slice upload after restart: %s, completed slices: %d/%d" ,
90
- su .TaskID , tables .CountUploadedSlices (su .SliceUploadStatus ), su .SliceCnt )
92
+ completedSlices := tables .CountUploadedSlices (su .SliceUploadStatus )
93
+ log .Infof ("Resuming file-based slice upload: %s, completed: %d/%d" ,
94
+ su .TaskID , completedSlices , su .SliceCnt )
91
95
return & reqres.PreupResp {
92
96
TaskID : su .TaskID ,
93
97
SliceSize : su .SliceSize ,
@@ -96,10 +100,12 @@ func (m *SliceUploadManager) CreateSession(ctx context.Context, storage driver.D
96
100
}, nil
97
101
}
98
102
} else {
99
- // 原生分片上传(如123open/baidu),无需临时文件
103
+ // Native slice upload, relying on frontend intelligent retry and state sync
100
104
session := & SliceUploadSession {SliceUpload : su }
101
105
m .cache .Store (su .TaskID , session )
102
- log .Infof ("Resuming native slice upload after restart: %s" , su .TaskID )
106
+ completedSlices := tables .CountUploadedSlices (su .SliceUploadStatus )
107
+ log .Infof ("Resuming native slice upload: %s, completed: %d/%d, relying on frontend sync" ,
108
+ su .TaskID , completedSlices , su .SliceCnt )
103
109
return & reqres.PreupResp {
104
110
TaskID : su .TaskID ,
105
111
SliceSize : su .SliceSize ,
@@ -259,10 +265,14 @@ func (m *SliceUploadManager) UploadSlice(ctx context.Context, storage driver.Dri
259
265
// 根据存储类型处理分片上传
260
266
switch s := storage .(type ) {
261
267
case driver.ISliceUpload :
268
+ // Native slice upload: directly pass stream data, let frontend handle retry and recovery
262
269
if err := s .SliceUpload (ctx , session .SliceUpload , req .SliceNum , reader ); err != nil {
263
- log .Error ("SliceUpload error" , req , err )
264
- return err
270
+ log .Errorf ("Native slice upload failed - TaskID: %s, SliceNum: %d, Error: %v" ,
271
+ req .TaskID , req .SliceNum , err )
272
+ return errors .WithMessagef (err , "slice %d upload failed" , req .SliceNum )
265
273
}
274
+ log .Debugf ("Native slice upload success - TaskID: %s, SliceNum: %d" ,
275
+ req .TaskID , req .SliceNum )
266
276
267
277
default : //其他网盘先缓存到本地
268
278
if err := session .ensureTmpFile (); err != nil {
0 commit comments