diff --git a/drivers/webdav/driver.go b/drivers/webdav/driver.go index 1a67fdc8..f7cb13e4 100644 --- a/drivers/webdav/driver.go +++ b/drivers/webdav/driver.go @@ -213,7 +213,11 @@ func (driver WebDav) Upload(file *model.FileStream, account *model.Account) erro } c := driver.NewClient(account) path := utils.Join(file.ParentPath, file.Name) - err := c.WriteStream(driver.WebDavPath(path), file, 0644) + callback := func(r *http.Request) { + r.Header.Set("Content-Type", file.GetMIMEType()) + r.ContentLength = int64(file.GetSize()) + } + err := c.WriteStream(driver.WebDavPath(path), file, 0644, callback) return err } diff --git a/pkg/gowebdav/client.go b/pkg/gowebdav/client.go index 0434ae15..0197dccc 100644 --- a/pkg/gowebdav/client.go +++ b/pkg/gowebdav/client.go @@ -396,7 +396,7 @@ func (c *Client) ReadStreamRange(path string, offset, length int64) (io.ReadClos // Write writes data to a given path func (c *Client) Write(path string, data []byte, _ os.FileMode) (err error) { - s, err := c.put(path, bytes.NewReader(data)) + s, err := c.put(path, bytes.NewReader(data), nil) if err != nil { return } @@ -412,7 +412,7 @@ func (c *Client) Write(path string, data []byte, _ os.FileMode) (err error) { return } - s, err = c.put(path, bytes.NewReader(data)) + s, err = c.put(path, bytes.NewReader(data), nil) if err != nil { return } @@ -425,14 +425,14 @@ func (c *Client) Write(path string, data []byte, _ os.FileMode) (err error) { } // WriteStream writes a stream -func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) (err error) { +func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode, callback func(r *http.Request)) (err error) { err = c.createParentCollection(path) if err != nil { return err } - s, err := c.put(path, stream) + s, err := c.put(path, stream, callback) if err != nil { return err } diff --git a/pkg/gowebdav/cmd/gowebdav/main.go b/pkg/gowebdav/cmd/gowebdav/main.go index b211f9f8..155bf76e 100644 --- a/pkg/gowebdav/cmd/gowebdav/main.go +++ b/pkg/gowebdav/cmd/gowebdav/main.go @@ -211,7 +211,7 @@ func cmdPut(c *d.Client, p0, p1 string) (err error) { } defer stream.Close() - if err = c.WriteStream(p0, stream, 0644); err == nil { + if err = c.WriteStream(p0, stream, 0644, nil); err == nil { fmt.Println("Put: " + p1 + " -> " + p0) } return diff --git a/pkg/gowebdav/requests.go b/pkg/gowebdav/requests.go index ac334707..5472db08 100644 --- a/pkg/gowebdav/requests.go +++ b/pkg/gowebdav/requests.go @@ -192,13 +192,14 @@ func (c *Client) copymove(method string, oldpath string, newpath string, overwri return newPathError(method, oldpath, s) } -func (c *Client) put(path string, stream io.Reader) (status int, err error) { - rs, err := c.req("PUT", path, stream, nil) +func (c *Client) put(path string, stream io.Reader, callback func(r *http.Request)) (status int, err error) { + rs, err := c.req("PUT", path, stream, callback) if err != nil { return } defer rs.Body.Close() - + //all, _ := io.ReadAll(rs.Body) + //logrus.Debugln("put res: ", string(all)) status = rs.StatusCode return }