| 125 | } |
| 126 | |
| 127 | func (fd *formData) write() error { |
| 128 | defer func() { _ = fd.mw.Close() }() |
| 129 | |
| 130 | var e error |
| 131 | for _, item := range fd.data { |
| 132 | if b, ok := item.data.([]byte); ok { |
| 133 | if e != nil { |
| 134 | continue |
| 135 | } |
| 136 | var fw io.Writer |
| 137 | fw, e = fd.mw.CreateFormField(item.field) |
| 138 | if e != nil { |
| 139 | continue |
| 140 | } |
| 141 | _, e = fw.Write(b) |
| 142 | } else if r, ok := item.data.(io.Reader); ok { |
| 143 | if rc, ok := r.(io.ReadCloser); ok { |
| 144 | defer func() { |
| 145 | _ = rc.Close() |
| 146 | }() |
| 147 | } |
| 148 | if e != nil { |
| 149 | continue |
| 150 | } |
| 151 | var fw io.Writer |
| 152 | fw, e = fd.mw.CreateFormFile(item.field, item.filename) |
| 153 | if e != nil { |
| 154 | continue |
| 155 | } |
| 156 | _, e = io.Copy(fw, r) |
| 157 | } |
| 158 | } |
| 159 | return e |
| 160 | } |
| 161 | |
| 162 | type httpHeaders struct { |
| 163 | vm *VM |