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" "encoding/json"
"io" "io"
"net/http" "net/http"
"net/url"
"polaris/log"
"strings" "strings"
"time" "time"
@@ -161,16 +163,19 @@ type UploadStreamResponse struct {
} `json:"task"` } `json:"task"`
} }
func (c *Client) UploadStream(reader io.Reader, toDir string) (*UploadStreamResponse, error) { func (c *Client) UploadStream(reader io.Reader, size int64, toDir string) (*UploadStreamResponse, error) {
req, err := http.NewRequest(http.MethodPost, c.cfg.URL+streamUploadUrl, reader) req, err := http.NewRequest(http.MethodPut, c.cfg.URL+streamUploadUrl, reader)
if err != nil { if err != nil {
return nil, err return nil, err
} }
req.Header.Add("Authorization", "{{alist_token}}")
req.Header.Add("File-Path", toDir) req.Header.Add("Authorization", c.token)
req.Header.Add("As-Task", "true") req.Header.Add("File-Path", url.QueryEscape(toDir))
req.Header.Add("Content-Length", "") //req.Header.Add("As-Task", "true")
req.Header.Add("Content-Type", "application/octet-stream") 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) res, err := c.http.Do(req)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -1,6 +1,7 @@
package alist package alist
import ( import (
"os"
"polaris/log" "polaris/log"
"testing" "testing"
) )
@@ -25,6 +26,21 @@ func TestLogin(t *testing.T) {
} else { } else {
log.Infof("ls results: %+v", info) 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 a.progresser = b.Progress
uploadFunc := func(destPath string, destInfo fs.FileInfo, srcReader io.Reader, mimeType *mimetype.MIME) error { 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 return err
} }
mkdirFunc := func(dir string) error { mkdirFunc := func(dir string) error {