diff --git a/pkg/alist/alist.go b/pkg/alist/alist.go index 1f9b98f..3eab7dc 100644 --- a/pkg/alist/alist.go +++ b/pkg/alist/alist.go @@ -5,6 +5,8 @@ import ( "encoding/json" "io" "net/http" + "net/url" + "polaris/log" "strings" "time" @@ -161,16 +163,19 @@ type UploadStreamResponse struct { } `json:"task"` } -func (c *Client) UploadStream(reader io.Reader, toDir string) (*UploadStreamResponse, error) { - req, err := http.NewRequest(http.MethodPost, c.cfg.URL+streamUploadUrl, reader) +func (c *Client) UploadStream(reader io.Reader, size int64, toDir string) (*UploadStreamResponse, error) { + req, err := http.NewRequest(http.MethodPut, c.cfg.URL+streamUploadUrl, reader) if err != nil { return nil, err } - req.Header.Add("Authorization", "{{alist_token}}") - req.Header.Add("File-Path", toDir) - req.Header.Add("As-Task", "true") - req.Header.Add("Content-Length", "") + + req.Header.Add("Authorization", c.token) + req.Header.Add("File-Path", url.QueryEscape(toDir)) + //req.Header.Add("As-Task", "true") req.Header.Add("Content-Type", "application/octet-stream") + req.ContentLength = size + + log.Infof("headers: %+v, %v", req.Header, req.URL.String()) res, err := c.http.Do(req) if err != nil { return nil, err diff --git a/pkg/alist/alist_test.go b/pkg/alist/alist_test.go index 0f30a90..18d0112 100644 --- a/pkg/alist/alist_test.go +++ b/pkg/alist/alist_test.go @@ -1,6 +1,7 @@ package alist import ( + "os" "polaris/log" "testing" ) @@ -25,6 +26,21 @@ func TestLogin(t *testing.T) { } else { log.Infof("ls results: %+v", info) } - err = c.Mkdir("/aliyun/test1") - log.Errorf("mkdir: %v", err) + + f, err := os.Open("/Users/simonding/Downloads/Steam Link_1.3.9_APKPure.apk") + if err != nil { + log.Errorf("openfile: %v", err) + t.Fail() + } else { + defer f.Close() + ss, _ := f.Stat() + log.Infof("upload file size %d", ss.Size()) + info, err := c.UploadStream(f, ss.Size(), "/aliyun/Steam Link_1.3.9_APKPure.apk") + if err != nil { + log.Errorf("upload error: %v", err) + t.Fail() + } else { + log.Infof("upload success: %+v", info) + } + } } diff --git a/pkg/storage/alist.go b/pkg/storage/alist.go index a89a497..f91b76a 100644 --- a/pkg/storage/alist.go +++ b/pkg/storage/alist.go @@ -41,7 +41,7 @@ func (a *Alist) Copy(src, dest string) error { a.progresser = b.Progress uploadFunc := func(destPath string, destInfo fs.FileInfo, srcReader io.Reader, mimeType *mimetype.MIME) error { - _, err := a.client.UploadStream(srcReader, destPath) + _, err := a.client.UploadStream(srcReader, destInfo.Size(), destPath) return err } mkdirFunc := func(dir string) error {