mirror of https://github.com/Xhofe/alist
fix(quqi): error on uploading an existing file (#5920)
parent
4f7761fe2c
commit
85a28d9822
|
@ -306,6 +306,22 @@ func (d *Quqi) Put(ctx context.Context, dstDir model.Obj, stream model.FileStrea
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
// check exist
|
||||||
|
// if the file already exists in Quqi server, there is no need to actually upload it
|
||||||
|
if uploadInitResp.Data.Exist {
|
||||||
|
// the file name returned by Quqi does not include the extension name
|
||||||
|
nodeName, nodeExt := uploadInitResp.Data.NodeName, rawExt(stream.GetName())
|
||||||
|
if nodeExt != "" {
|
||||||
|
nodeName = nodeName + "." + nodeExt
|
||||||
|
}
|
||||||
|
return &model.Object{
|
||||||
|
ID: strconv.FormatInt(uploadInitResp.Data.NodeID, 10),
|
||||||
|
Name: nodeName,
|
||||||
|
Size: stream.GetSize(),
|
||||||
|
Modified: stream.ModTime(),
|
||||||
|
Ctime: stream.CreateTime(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
// listParts
|
// listParts
|
||||||
_, err = d.request("upload.quqi.com:20807", "/upload/v1/listParts", resty.MethodPost, func(req *resty.Request) {
|
_, err = d.request("upload.quqi.com:20807", "/upload/v1/listParts", resty.MethodPost, func(req *resty.Request) {
|
||||||
req.SetFormData(map[string]string{
|
req.SetFormData(map[string]string{
|
||||||
|
@ -384,9 +400,14 @@ func (d *Quqi) Put(ctx context.Context, dstDir model.Obj, stream model.FileStrea
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
// the file name returned by Quqi does not include the extension name
|
||||||
|
nodeName, nodeExt := uploadFinishResp.Data.NodeName, rawExt(stream.GetName())
|
||||||
|
if nodeExt != "" {
|
||||||
|
nodeName = nodeName + "." + nodeExt
|
||||||
|
}
|
||||||
return &model.Object{
|
return &model.Object{
|
||||||
ID: strconv.FormatInt(uploadFinishResp.Data.NodeID, 10),
|
ID: strconv.FormatInt(uploadFinishResp.Data.NodeID, 10),
|
||||||
Name: uploadFinishResp.Data.NodeName,
|
Name: nodeName,
|
||||||
Size: stream.GetSize(),
|
Size: stream.GetSize(),
|
||||||
Modified: stream.ModTime(),
|
Modified: stream.ModTime(),
|
||||||
Ctime: stream.CreateTime(),
|
Ctime: stream.CreateTime(),
|
||||||
|
|
|
@ -133,6 +133,9 @@ type UploadInitResp struct {
|
||||||
Token string `json:"token"`
|
Token string `json:"token"`
|
||||||
UploadID string `json:"upload_id"`
|
UploadID string `json:"upload_id"`
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
|
NodeID int64 `json:"node_id"`
|
||||||
|
NodeName string `json:"node_name"`
|
||||||
|
ParentID int64 `json:"parent_id"`
|
||||||
} `json:"data"`
|
} `json:"data"`
|
||||||
Err int `json:"err"`
|
Err int `json:"err"`
|
||||||
Msg string `json:"msg"`
|
Msg string `json:"msg"`
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
stdpath "path"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/alist-org/alist/v3/drivers/base"
|
"github.com/alist-org/alist/v3/drivers/base"
|
||||||
|
@ -97,3 +98,13 @@ func (d *Quqi) checkLogin() bool {
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rawExt 保留扩展名大小写
|
||||||
|
func rawExt(name string) string {
|
||||||
|
ext := stdpath.Ext(name)
|
||||||
|
if strings.HasPrefix(ext, ".") {
|
||||||
|
ext = ext[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
return ext
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue