diff --git a/drivers/123_open/driver.go b/drivers/123_open/driver.go index 63361018..547ee810 100644 --- a/drivers/123_open/driver.go +++ b/drivers/123_open/driver.go @@ -122,12 +122,12 @@ func (d *Open123) Remove(ctx context.Context, obj model.Obj) error { return d.trash(fileId) } -func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStreamer, up driver.UpdateProgress) error { +func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStreamer, up driver.UpdateProgress) (model.Obj, error) { // 1. 创建文件 // parentFileID 父目录id,上传到根目录时填写 0 parentFileId, err := strconv.ParseInt(dstDir.GetID(), 10, 64) if err != nil { - return fmt.Errorf("parse parentFileID error: %v", err) + return nil, fmt.Errorf("parse parentFileID error: %v", err) } // etag 文件md5 etag := file.GetHash().GetHash(utils.MD5) @@ -136,22 +136,31 @@ func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStre up = model.UpdateProgressWithRange(up, 50, 100) _, etag, err = stream.CacheFullInTempFileAndHash(file, cacheFileProgress, utils.MD5) if err != nil { - return err + return nil, err } } createResp, err := d.create(parentFileId, file.GetName(), etag, file.GetSize(), 2, false) if err != nil { - return err + return nil, err } // 是否秒传 if createResp.Data.Reuse { - return nil + // 秒传成功才会返回正确的 FileID,否则为 0 + if createResp.Data.FileID != 0 { + return File{ + FileName: file.GetName(), + Size: file.GetSize(), + FileId: createResp.Data.FileID, + Type: 2, + Etag: etag, + }, nil + } } // 2. 上传分片 err = d.Upload(ctx, file, createResp, up) if err != nil { - return err + return nil, err } // 3. 上传完毕 @@ -159,13 +168,20 @@ func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStre uploadCompleteResp, err := d.complete(createResp.Data.PreuploadID) // 返回错误代码未知,如:20103,文档也没有具体说 if err == nil && uploadCompleteResp.Data.Completed && uploadCompleteResp.Data.FileID != 0 { - break + up(100) + return File{ + FileName: file.GetName(), + Size: file.GetSize(), + FileId: uploadCompleteResp.Data.FileID, + Type: 2, + Etag: etag, + }, nil } // 若接口返回的completed为 false 时,则需间隔1秒继续轮询此接口,获取上传最终结果。 time.Sleep(time.Second) } - up(100) - return nil + return nil, fmt.Errorf("upload complete timeout") } var _ driver.Driver = (*Open123)(nil) +var _ driver.PutResult = (*Open123)(nil) diff --git a/drivers/123_open/types.go b/drivers/123_open/types.go index cd7203cf..c17048d2 100644 --- a/drivers/123_open/types.go +++ b/drivers/123_open/types.go @@ -73,7 +73,9 @@ func (f File) GetName() string { } func (f File) CreateTime() time.Time { - parsedTime, err := time.Parse("2006-01-02 15:04:05", f.CreateAt) + // 返回的时间没有时区信息,默认 UTC+8 + loc := time.FixedZone("UTC+8", 8*60*60) + parsedTime, err := time.ParseInLocation("2006-01-02 15:04:05", f.CreateAt, loc) if err != nil { return time.Now() } @@ -81,7 +83,9 @@ func (f File) CreateTime() time.Time { } func (f File) ModTime() time.Time { - parsedTime, err := time.Parse("2006-01-02 15:04:05", f.UpdateAt) + // 返回的时间没有时区信息,默认 UTC+8 + loc := time.FixedZone("UTC+8", 8*60*60) + parsedTime, err := time.ParseInLocation("2006-01-02 15:04:05", f.UpdateAt, loc) if err != nil { return time.Now() }