@@ -269,43 +269,55 @@ func parserRequestBodyFile(req *Request) error {
269269
270270 defer fileBufPool .Put (fileBuf )
271271
272- for i , v := range req .files {
273- if v .name == "" && v .path == "" {
272+ for i , f := range req .files {
273+ if f .name == "" && f .path == "" {
274274 return ErrFileNoName
275275 }
276276
277277 // Set the file name if not provided.
278- if v .name == "" && v .path != "" {
279- v .path = filepath .Clean (v .path )
280- v .name = filepath .Base (v .path )
278+ if f .name == "" && f .path != "" {
279+ f .path = filepath .Clean (f .path )
280+ f .name = filepath .Base (f .path )
281281 }
282282
283283 // Set the field name if not provided.
284- if v .fieldName == "" {
285- v .fieldName = "file" + strconv .Itoa (i + 1 )
284+ if f .fieldName == "" {
285+ f .fieldName = "file" + strconv .Itoa (i + 1 )
286286 }
287287
288- // If reader is not set, open the file.
289- if v .reader == nil {
290- v .reader , err = os .Open (v .path )
291- if err != nil {
292- return fmt .Errorf ("open file error: %w" , err )
293- }
288+ if err := addFormFile (mw , f , fileBuf ); err != nil {
289+ return err
294290 }
291+ }
292+
293+ return nil
294+ }
295295
296- // Create form file and copy the content.
297- w , err := mw .CreateFormFile (v .fieldName , v .name )
296+ func addFormFile (mw * multipart.Writer , f * File , fileBuf * []byte ) (e error ) {
297+ // If reader is not set, open the file.
298+ if f .reader == nil {
299+ var err error
300+ f .reader , err = os .Open (f .path )
298301 if err != nil {
299- return fmt .Errorf ("create file error: %w" , err )
302+ return fmt .Errorf ("open file error: %w" , err )
300303 }
304+ }
301305
302- if _ , err := io .CopyBuffer (w , v .reader , * fileBuf ); err != nil {
303- return fmt .Errorf ("failed to copy file data: %w" , err )
306+ // Ensure the file reader is always closed after copying.
307+ defer func () {
308+ if err := f .reader .Close (); err != nil {
309+ e = fmt .Errorf ("close file error: %w" , err )
304310 }
311+ }()
305312
306- if err := v .reader .Close (); err != nil {
307- return fmt .Errorf ("close file error: %w" , err )
308- }
313+ // Create form file and copy the content.
314+ w , err := mw .CreateFormFile (f .fieldName , f .name )
315+ if err != nil {
316+ return fmt .Errorf ("create file error: %w" , err )
317+ }
318+
319+ if _ , err := io .CopyBuffer (w , f .reader , * fileBuf ); err != nil {
320+ return fmt .Errorf ("failed to copy file data: %w" , err )
309321 }
310322
311323 return nil
0 commit comments