Manweill / swagger-axios-codegen

swagger client to use axios and typescript
MIT License
306 stars 83 forks source link

Issue with file uploads #102

Open joshstrange opened 4 years ago

joshstrange commented 4 years ago

The JSON Swagger file looks like it should work according the the spec and I dug down into the code and I think the issue is in mapFormDataToV2 (or one level above).

Relevant parts of my spec:

"/photos/fromUpload": {
  "post": {
    "operationId": "createFromUpload",
    "summary": "",
    "parameters": [],
    "requestBody": {
      "required": true,
      "description": "Upload File",
      "content": {
        "multipart/form-data": {
          "schema": {
            "$ref": "#/components/schemas/FileUploadDto"
          }
        }
      }
    },
    "responses": {
      "201": {
        "description": "",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PhotoEntity"
            }
          }
        }
      }
    },
    "tags": [
      "photos"
    ]
  }
},

......

"FileUploadDto": {
    "type": "object",
    "properties": {
      "file": {
        "type": "string",
        "format": "binary"
      }
    },
    "required": [
      "file"
    ]
  },

From debugging the code I see that right being passed into mapFormDataToV2 my multiDataProperties is:

{ schema: { '$ref': '#/components/schemas/FileUploadDto' } }

but inside mapFormDataToV2 it doesn't "expand" the $ref like you do in getResponseType.ts. I tried expanding the FileUploadDto inline in the code and it correctly generated the axios code.

I feel like the fix is to either copy/paste some/all of the logic from getResponseType.ts into mapFormDataToV2 or abstract the logic away into another function they both use. Thoughts?

Manweill commented 4 years ago

does not support uploading files by reference dto now.

joshstrange commented 4 years ago

@Manweill Would you accept a PR that made it work with reference DTO's?

Manweill commented 4 years ago

@joshstrange Welcome.