fix(quqi): empty file link for non vip user (#5926)

* fix(quqi): error returned when uploading a file that existed

* fix empty download link for no vip user

* fix cannot parse request result

---------

Co-authored-by: Andy Hsu <i@nn.ci>
pull/5938/head
Echo Response 2024-01-21 15:28:52 +08:00 committed by GitHub
parent 85a28d9822
commit d88b54d98a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 2 deletions

View File

@ -127,6 +127,7 @@ func (d *Quqi) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]
func (d *Quqi) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
var getDocResp = &GetDocRes{}
// 优先从getDoc接口获取文件预览链接速度比实际下载链接更快
if _, err := d.request("", "/api/doc/getDoc", resty.MethodPost, func(req *resty.Request) {
req.SetFormData(map[string]string{
"quqi_id": d.GroupID,
@ -137,7 +138,7 @@ func (d *Quqi) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*
}, getDocResp); err != nil {
return nil, err
}
if getDocResp.Data.OriginPath != "" {
return &model.Link{
URL: getDocResp.Data.OriginPath,
Header: http.Header{
@ -147,6 +148,30 @@ func (d *Quqi) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*
}, nil
}
// 对于非会员用户无法从getDoc接口获取文件预览链接只能获取下载链接
var getDownloadResp GetDownloadResp
if _, err := d.request("", "/api/doc/getDownload", resty.MethodGet, func(req *resty.Request) {
req.SetQueryParams(map[string]string{
"quqi_id": d.GroupID,
"tree_id": "1",
"node_id": file.GetID(),
"url_type": "undefined",
"entry_type": "undefined",
"client_id": d.ClientID,
"no_redirect": "1",
})
}, &getDownloadResp); err != nil {
return nil, err
}
return &model.Link{
URL: getDownloadResp.Data.Url,
Header: http.Header{
"Origin": []string{"https://quqi.com"},
"Cookie": []string{d.Cookie},
},
}, nil
}
func (d *Quqi) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error) {
var (
makeDirRes = &MakeDirRes{}

View File

@ -31,6 +31,13 @@ type GetDocRes struct {
} `json:"data"`
}
type GetDownloadResp struct {
BaseRes
Data struct {
Url string `json:"url"`
} `json:"data"`
}
type MakeDirRes struct {
BaseRes
Data struct {

View File

@ -32,7 +32,7 @@ func (d *Quqi) request(host string, path string, method string, callback base.Re
req.SetHeaders(map[string]string{
"Origin": "https://quqi.com",
"Cookie": d.Cookie,
}).SetResult(&result)
})
if d.GroupID != "" {
req.SetQueryParam("quqiid", d.GroupID)
@ -46,6 +46,11 @@ func (d *Quqi) request(host string, path string, method string, callback base.Re
if err != nil {
return nil, err
}
// resty.Request.SetResult cannot parse result correctly sometimes
err = utils.Json.Unmarshal(res.Body(), &result)
if err != nil {
return nil, err
}
if result.Code != 0 {
return nil, errors.New(result.Message)
}