Search code examples
google-cloud-platformgoogle-api-gateway

FIle upload in GCP API Gateway


I'm trying to create the following api config for GCP API Gateway (ommitted real backend URL):

swagger: '2.0'
info:
  title: upload
  description: upload
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
security:
  - api_key: [ ]

paths:
  /upload:
    post:
      summary: uploads a file.
      consumes:
        - multipart/form-data
      operationId: uploadFile
      parameters:
        - in: formData
          name: file
          description: The file to upload.
          required: true
          type: file
      responses:
        '200':
          description: upload successful
      x-google-backend:
        address: https://XXXXX.XXXXX
        path_translation: APPEND_PATH_TO_ADDRESS    

securityDefinitions:
  api_key:
    type: "apiKey"
    name: "key"
    in: "query" 

Running gcloud (replaced real variables with placeholders)

gcloud api-gateway api-configs create uploadconfig --api=[API] --openapi-spec=openapi.yaml --project=[MYPROJECT] --backend-auth-service-account=[ACCOUNT]

This results in this error message:

ERROR: (gcloud.api-gateway.api-configs.create) INVALID_ARGUMENT: Cannot convert to service config. 'location: "unknown location" kind: ERROR message: "http: repeated message field 'google.protobuf.Struct.fields' referred to by message 'UploadFileRequest' cannot be mapped as an HTTP parameter." location: "unknown location" kind: ERROR message: "http: cyclic message field 'google.protobuf.Struct.FieldsEntry.value' referred to by message 'UploadFileRequest' in method 'method 1.xxxxxxx.UploadFile' cannot be mapped as an HTTP parameter."

I verified the gcloud command with a different api configurations and backends.

The config itself seems fine, i.e. it validates with Swagger editor, still gcloud won't accept it. How do I define a file upload via API Gateway?


Solution

  • As per file upload Endpoints does not accept the type: file for file upload parameters, type: string should be used instead.And I tried config with changed parameters and it validates with Swagger editor results are here.