Skip to content

Commit 5ae8e96

Browse files
xrgzsCopilotSuyunmeng
authored
feat(123_open): update Put method to return model.Obj (#1008)
* feat(123_open): update Put method to return model.Obj * fix(123_open): declear time zones * chore(123_open): fix typo Co-authored-by: Copilot <[email protected]> Signed-off-by: MadDogOwner <[email protected]> * fix(123_open): use fixed timezone * fix(123_open): implement PutResult interface for Open123 driver --------- Signed-off-by: MadDogOwner <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Suyunmeng <[email protected]>
1 parent aa0ced4 commit 5ae8e96

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

drivers/123_open/driver.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

171186
var _ driver.Driver = (*Open123)(nil)
187+
var _ driver.PutResult = (*Open123)(nil)

drivers/123_open/types.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,19 @@ func (f File) GetName() string {
7373
}
7474

7575
func (f File) CreateTime() time.Time {
76-
parsedTime, err := time.Parse("2006-01-02 15:04:05", f.CreateAt)
76+
// 返回的时间没有时区信息,默认 UTC+8
77+
loc := time.FixedZone("UTC+8", 8*60*60)
78+
parsedTime, err := time.ParseInLocation("2006-01-02 15:04:05", f.CreateAt, loc)
7779
if err != nil {
7880
return time.Now()
7981
}
8082
return parsedTime
8183
}
8284

8385
func (f File) ModTime() time.Time {
84-
parsedTime, err := time.Parse("2006-01-02 15:04:05", f.UpdateAt)
86+
// 返回的时间没有时区信息,默认 UTC+8
87+
loc := time.FixedZone("UTC+8", 8*60*60)
88+
parsedTime, err := time.ParseInLocation("2006-01-02 15:04:05", f.UpdateAt, loc)
8589
if err != nil {
8690
return time.Now()
8791
}

0 commit comments

Comments
 (0)