]> Cypherpunks repositories - gostls13.git/commitdiff
mime/multipart: add Size to FileHeader
authorJamie Stackhouse <contin673@gmail.com>
Sat, 1 Apr 2017 04:07:59 +0000 (01:07 -0300)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sat, 1 Apr 2017 10:04:56 +0000 (10:04 +0000)
This change makes it possible to retrieve the size of a file part
without having to Seek to determine file-size.

Resolves #19501

Change-Id: I7b9994c4cf41c9b06a046eb7046f8952ae1f15e9
Reviewed-on: https://go-review.googlesource.com/39223
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/mime/multipart/formdata.go
src/mime/multipart/formdata_test.go

index c9e3188c33aa5b261ae7326f848dc720b29283e7..26817a188b52461924ebafbb10f4107f142435f1 100644 (file)
@@ -79,7 +79,7 @@ func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {
                        if err != nil {
                                return nil, err
                        }
-                       _, err = io.Copy(file, io.MultiReader(&b, p))
+                       size, err := io.Copy(file, io.MultiReader(&b, p))
                        if cerr := file.Close(); err == nil {
                                err = cerr
                        }
@@ -88,8 +88,10 @@ func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {
                                return nil, err
                        }
                        fh.tmpfile = file.Name()
+                       fh.Size = size
                } else {
                        fh.content = b.Bytes()
+                       fh.Size = int64(len(fh.content))
                        maxMemory -= n
                }
                form.File[name] = append(form.File[name], fh)
@@ -128,6 +130,7 @@ func (f *Form) RemoveAll() error {
 type FileHeader struct {
        Filename string
        Header   textproto.MIMEHeader
+       Size     int64
 
        content []byte
        tmpfile string
index 1deca0b94dfab5a70d3b2ec1352a8c39a98fe346..ed848e1a09ac1e9e5895f642b073dd258382d0ae 100644 (file)
@@ -44,6 +44,9 @@ func testFile(t *testing.T, fh *FileHeader, efn, econtent string) File {
        if fh.Filename != efn {
                t.Errorf("filename = %q, want %q", fh.Filename, efn)
        }
+       if fh.Size != int64(len(econtent)) {
+               t.Errorf("size = %d, want %d", fh.Size, len(econtent))
+       }
        f, err := fh.Open()
        if err != nil {
                t.Fatal("opening file:", err)