Skip to content

Commit ae15038

Browse files
committed
chore(filer): big data upload support
1 parent 0b1023f commit ae15038

1 file changed

Lines changed: 20 additions & 14 deletions

File tree

volumes/filer.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
package volumes
33

44
import (
5-
"bytes"
65
"encoding/json"
76
"fmt"
87
"io"
@@ -43,21 +42,28 @@ func GetFile(c *drycc.Client, appID, volumeID, path string) (*http.Response, err
4342

4443
// Put file to an app's volume.
4544
func PostFile(c *drycc.Client, appID, volumeID, volumePath, name string, reader io.Reader) (*http.Response, error) {
46-
buffer := new(bytes.Buffer)
47-
writer := multipart.NewWriter(buffer)
48-
if part, err := writer.CreateFormFile("file", name); err != nil {
49-
return nil, err
50-
} else if _, err = io.Copy(part, reader); err != nil {
51-
return nil, err
52-
}
53-
54-
if err := writer.WriteField("path", volumePath); err != nil {
55-
return nil, err
56-
}
57-
writer.Close()
45+
pr, pw := io.Pipe()
46+
writer := multipart.NewWriter(pw)
47+
go func() {
48+
if err := writer.WriteField("path", volumePath); err != nil {
49+
pw.CloseWithError(err)
50+
return
51+
}
52+
part, err := writer.CreateFormFile("file", name)
53+
if err != nil {
54+
pw.CloseWithError(err)
55+
return
56+
}
57+
_, err = io.Copy(part, reader)
58+
if err != nil {
59+
pw.CloseWithError(err)
60+
return
61+
}
62+
pw.CloseWithError(writer.Close())
63+
}()
5864

5965
u := fmt.Sprintf("/v2/apps/%s/volumes/%s/client/", appID, volumeID)
60-
r, err := c.NewRequest("POST", u, buffer)
66+
r, err := c.NewRequest("POST", u, pr)
6167
if err != nil {
6268
return nil, err
6369
}

0 commit comments

Comments
 (0)