fix: alist upload

This commit is contained in:
Simon Ding
2024-11-17 23:40:31 +08:00
parent af2a30405c
commit 3af4ac795e
3 changed files with 30 additions and 9 deletions

View File

@@ -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

View File

@@ -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)
}
}
}

View File

@@ -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 {