@@ -122,12 +122,12 @@ func (d *Open123) Remove(ctx context.Context, obj model.Obj) error {
122
122
return d .trash (fileId )
123
123
}
124
124
125
- func (d * Open123 ) Put (ctx context.Context , dstDir model.Obj , file model.FileStreamer , up driver.UpdateProgress ) error {
125
+ func (d * Open123 ) Put (ctx context.Context , dstDir model.Obj , file model.FileStreamer , up driver.UpdateProgress ) (model. Obj , error ) {
126
126
// 1. 创建文件
127
127
// parentFileID 父目录id,上传到根目录时填写 0
128
128
parentFileId , err := strconv .ParseInt (dstDir .GetID (), 10 , 64 )
129
129
if err != nil {
130
- return fmt .Errorf ("parse parentFileID error: %v" , err )
130
+ return nil , fmt .Errorf ("parse parentFileID error: %v" , err )
131
131
}
132
132
// etag 文件md5
133
133
etag := file .GetHash ().GetHash (utils .MD5 )
@@ -136,36 +136,52 @@ func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
136
136
up = model .UpdateProgressWithRange (up , 50 , 100 )
137
137
_ , etag , err = stream .CacheFullInTempFileAndHash (file , cacheFileProgress , utils .MD5 )
138
138
if err != nil {
139
- return err
139
+ return nil , err
140
140
}
141
141
}
142
142
createResp , err := d .create (parentFileId , file .GetName (), etag , file .GetSize (), 2 , false )
143
143
if err != nil {
144
- return err
144
+ return nil , err
145
145
}
146
146
// 是否秒传
147
147
if createResp .Data .Reuse {
148
- return nil
148
+ // 秒传成功才会返回正确的 FileID,否则为 0
149
+ if createResp .Data .FileID != 0 {
150
+ return File {
151
+ FileName : file .GetName (),
152
+ Size : file .GetSize (),
153
+ FileId : createResp .Data .FileID ,
154
+ Type : 2 ,
155
+ Etag : etag ,
156
+ }, nil
157
+ }
149
158
}
150
159
151
160
// 2. 上传分片
152
161
err = d .Upload (ctx , file , createResp , up )
153
162
if err != nil {
154
- return err
163
+ return nil , err
155
164
}
156
165
157
166
// 3. 上传完毕
158
167
for range 60 {
159
168
uploadCompleteResp , err := d .complete (createResp .Data .PreuploadID )
160
169
// 返回错误代码未知,如:20103,文档也没有具体说
161
170
if err == nil && uploadCompleteResp .Data .Completed && uploadCompleteResp .Data .FileID != 0 {
162
- break
171
+ up (100 )
172
+ return File {
173
+ FileName : file .GetName (),
174
+ Size : file .GetSize (),
175
+ FileId : uploadCompleteResp .Data .FileID ,
176
+ Type : 2 ,
177
+ Etag : etag ,
178
+ }, nil
163
179
}
164
180
// 若接口返回的completed为 false 时,则需间隔1秒继续轮询此接口,获取上传最终结果。
165
181
time .Sleep (time .Second )
166
182
}
167
- up (100 )
168
- return nil
183
+ return nil , fmt .Errorf ("upload complete timeout" )
169
184
}
170
185
171
186
var _ driver.Driver = (* Open123 )(nil )
187
+ var _ driver.PutResult = (* Open123 )(nil )
0 commit comments