@@ -122,12 +122,12 @@ func (d *Open123) Remove(ctx context.Context, obj model.Obj) error {
122122 return d .trash (fileId )
123123}
124124
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 ) {
126126 // 1. 创建文件
127127 // parentFileID 父目录id,上传到根目录时填写 0
128128 parentFileId , err := strconv .ParseInt (dstDir .GetID (), 10 , 64 )
129129 if err != nil {
130- return fmt .Errorf ("parse parentFileID error: %v" , err )
130+ return nil , fmt .Errorf ("parse parentFileID error: %v" , err )
131131 }
132132 // etag 文件md5
133133 etag := file .GetHash ().GetHash (utils .MD5 )
@@ -136,36 +136,52 @@ func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
136136 up = model .UpdateProgressWithRange (up , 50 , 100 )
137137 _ , etag , err = stream .CacheFullInTempFileAndHash (file , cacheFileProgress , utils .MD5 )
138138 if err != nil {
139- return err
139+ return nil , err
140140 }
141141 }
142142 createResp , err := d .create (parentFileId , file .GetName (), etag , file .GetSize (), 2 , false )
143143 if err != nil {
144- return err
144+ return nil , err
145145 }
146146 // 是否秒传
147147 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+ }
149158 }
150159
151160 // 2. 上传分片
152161 err = d .Upload (ctx , file , createResp , up )
153162 if err != nil {
154- return err
163+ return nil , err
155164 }
156165
157166 // 3. 上传完毕
158167 for range 60 {
159168 uploadCompleteResp , err := d .complete (createResp .Data .PreuploadID )
160169 // 返回错误代码未知,如:20103,文档也没有具体说
161170 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
163179 }
164180 // 若接口返回的completed为 false 时,则需间隔1秒继续轮询此接口,获取上传最终结果。
165181 time .Sleep (time .Second )
166182 }
167- up (100 )
168- return nil
183+ return nil , fmt .Errorf ("upload complete timeout" )
169184}
170185
171186var _ driver.Driver = (* Open123 )(nil )
187+ var _ driver.PutResult = (* Open123 )(nil )
0 commit comments