From db9cc3c488718596342520719b61322e63474850 Mon Sep 17 00:00:00 2001 From: RandomChars <random@chars.jp> Date: Sun, 3 Oct 2021 23:05:23 +0900 Subject: [PATCH] potential fix of multipart form submit --- client/image.go | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/client/image.go b/client/image.go index f925544..51f70d6 100644 --- a/client/image.go +++ b/client/image.go @@ -2,6 +2,8 @@ package client import ( "bytes" + "fmt" + "io" "mime/multipart" "net/http" "random.chars.jp/git/image-board/api" @@ -17,13 +19,21 @@ func (r *Remote) Images() ([]string, error) { } // ImageAdd adds an image to Remote and returns a store.Image. -func (r *Remote) ImageAdd(data []byte) (store.Image, error) { +func (r *Remote) ImageAdd(reader io.Reader) (store.Image, error) { + if c, ok := reader.(io.Closer); ok { + defer func() { + if err := c.Close(); err != nil { + fmt.Printf("Error closing Closer, %s", err) + } + }() + } + buf := &bytes.Buffer{} w := multipart.NewWriter(buf) - if f, err := w.CreateFormFile("image", ""); err != nil { + if f, err := w.CreateFormField("image"); err != nil { return store.Image{}, err } else { - if _, err = f.Write(data); err != nil { + if _, err = io.Copy(f, reader); err != nil { return store.Image{}, err } } @@ -32,12 +42,18 @@ func (r *Remote) ImageAdd(data []byte) (store.Image, error) { return store.Image{}, err } - if resp, err := r.request(http.MethodPost, api.Image, buf); err != nil { + if req, err := http.NewRequest(http.MethodPost, r.URL(api.Image), buf); err != nil { return store.Image{}, err } else { - var image store.Image - err = unmarshal(resp.Body, &image) - return image, err + req.Header.Set("Content-Type", w.FormDataContentType()) + var resp *http.Response + if resp, err = r.send(req); err != nil { + return store.Image{}, err + } else { + var image store.Image + err = unmarshal(resp.Body, &image) + return image, err + } } } -- GitLab