swagger-codegen icon indicating copy to clipboard operation
swagger-codegen copied to clipboard

TypeScript Fetch client doesn't support multipart/form-data body

Open janslow opened this issue 9 years ago • 6 comments

Description

If a POST operation accepts multipart/form-data, the typescript-fetch client posts an application/x-www-form-urlencoded body instead of form data.

Swagger-codegen version

Version currently deployed on [editor.swagger.io]

Swagger declaration file content or url
swagger: '2.0'
info: { version: 0.1.0, title: Multipart Upload }
paths:
  /:
    post:
      operationId: upload
      consumes:
        - multipart/form-data
      parameters:
        - name: file
          in: formData
          required: true
          type: file
      responses: { '200': { description: Successful upload } }
Command line used for generation

"Generate Client" -> "TypeScript Fetch" on [editor.swagger.io]

Steps to reproduce
  1. Generate and compile the sample config
  2. Call it with a file
  3. Log the request, it has a Content-Type of application/x-www-form-urlencoded instead of multipart/form-data.
Suggest a Fix

Instead of setting the Content-Type and using querystring to serialize the contents (for multipart/form-data requests), it should just set the body to an instance of FormData instead of

e.g., in DefaultApiFetchParamCreactor#upload, instead of :

let contentTypeHeader: Dictionary<string>;
contentTypeHeader = { "Content-Type": "application/x-www-form-urlencoded" };
fetchOptions.body = querystring.stringify({ 
  "file": params.file,
});
if (contentTypeHeader) {
  fetchOptions.headers = contentTypeHeader;
}

it should generate (as Content-Type is set to multipart/form-data automatically if using FormData):

const formData = new FormData();
formData.append("file", params.file);
fetchOptions.body = formData;

janslow avatar Oct 04 '16 17:10 janslow

@janslow thanks for reporting the issue. May I know if you've time to contribute the fix?

wing328 avatar Feb 15 '17 15:02 wing328

@wing328 I actually ran into the same issue myself and was in the process of putting together a PR for this and #4153

I can try to pull something together in the next few days, if that's useful for you and @janslow

russtacular avatar Feb 15 '17 19:02 russtacular

Just wondering whether there is any update with this issue?

bvwells avatar Mar 12 '18 09:03 bvwells

Hey, guys! What about this issue? When you planning to fix that bug?

@wing328 @russtacular

Alexuy avatar Jun 27 '18 16:06 Alexuy

+1

Splash34 avatar Feb 07 '20 12:02 Splash34

Any news on a fix?

currently we can't use any endpoint which uploads a file because of this :cry: .

ds1371dani avatar Dec 20 '23 10:12 ds1371dani