mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-09-19 12:16:24 +08:00
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 <175728472+Copilot@users.noreply.github.com> Signed-off-by: MadDogOwner <xiaoran@xrgzs.top> * fix(123_open): use fixed timezone * fix(123_open): implement PutResult interface for Open123 driver --------- Signed-off-by: MadDogOwner <xiaoran@xrgzs.top> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Suyunmeng <69945917+Suyunmeng@users.noreply.github.com>
This commit is contained in:
@ -122,12 +122,12 @@ func (d *Open123) Remove(ctx context.Context, obj model.Obj) error {
|
|||||||
return d.trash(fileId)
|
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. 创建文件
|
// 1. 创建文件
|
||||||
// parentFileID 父目录id,上传到根目录时填写 0
|
// parentFileID 父目录id,上传到根目录时填写 0
|
||||||
parentFileId, err := strconv.ParseInt(dstDir.GetID(), 10, 64)
|
parentFileId, err := strconv.ParseInt(dstDir.GetID(), 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parse parentFileID error: %v", err)
|
return nil, fmt.Errorf("parse parentFileID error: %v", err)
|
||||||
}
|
}
|
||||||
// etag 文件md5
|
// etag 文件md5
|
||||||
etag := file.GetHash().GetHash(utils.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)
|
up = model.UpdateProgressWithRange(up, 50, 100)
|
||||||
_, etag, err = stream.CacheFullInTempFileAndHash(file, cacheFileProgress, utils.MD5)
|
_, etag, err = stream.CacheFullInTempFileAndHash(file, cacheFileProgress, utils.MD5)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createResp, err := d.create(parentFileId, file.GetName(), etag, file.GetSize(), 2, false)
|
createResp, err := d.create(parentFileId, file.GetName(), etag, file.GetSize(), 2, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
// 是否秒传
|
// 是否秒传
|
||||||
if createResp.Data.Reuse {
|
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. 上传分片
|
// 2. 上传分片
|
||||||
err = d.Upload(ctx, file, createResp, up)
|
err = d.Upload(ctx, file, createResp, up)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 上传完毕
|
// 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)
|
uploadCompleteResp, err := d.complete(createResp.Data.PreuploadID)
|
||||||
// 返回错误代码未知,如:20103,文档也没有具体说
|
// 返回错误代码未知,如:20103,文档也没有具体说
|
||||||
if err == nil && uploadCompleteResp.Data.Completed && uploadCompleteResp.Data.FileID != 0 {
|
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秒继续轮询此接口,获取上传最终结果。
|
// 若接口返回的completed为 false 时,则需间隔1秒继续轮询此接口,获取上传最终结果。
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
}
|
}
|
||||||
up(100)
|
return nil, fmt.Errorf("upload complete timeout")
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ driver.Driver = (*Open123)(nil)
|
var _ driver.Driver = (*Open123)(nil)
|
||||||
|
var _ driver.PutResult = (*Open123)(nil)
|
||||||
|
@ -73,7 +73,9 @@ func (f File) GetName() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f File) CreateTime() time.Time {
|
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 {
|
if err != nil {
|
||||||
return time.Now()
|
return time.Now()
|
||||||
}
|
}
|
||||||
@ -81,7 +83,9 @@ func (f File) CreateTime() time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f File) ModTime() 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 {
|
if err != nil {
|
||||||
return time.Now()
|
return time.Now()
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user