Esta es el arreglo más completa que encomtrarás compartir, pero primero estúdiala pausadamente y valora si se adapta a tu trabajo.
Solución:
API Gateway actualmente no admite datos de formularios de varias partes. Esto se está considerando para el desarrollo futuro. Mientras tanto, deberá modificar su cliente para usar varias solicitudes o una sola solicitud de una parte.
Actualizar: API Gateway ahora admite cargas útiles binarias. Simplemente defina multipart/form-data
como un tipo de medio binario para su API y envíe la carga útil directamente a una función de Lambda. Desde allí, puede analizar el cuerpo para obtener el contenido de su archivo. Debería haber bibliotecas disponibles para ayudar a analizar el cuerpo multiparte (parse-multipart en Node.js, por ejemplo).
Para aquellos que aún necesitan ayuda, esto ahora está documentado oficialmente:
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html
Para resumir, los pasos son los siguientes:
- Vaya a la pestaña de configuración de API Gateway para su API y agregue
multipart/form-data
al tipos de medios binarios sección. - Agregar
Content-Type
yAccept
a los encabezados de solicitud para su método de proxy - Agregue esos mismos encabezados a los encabezados de solicitud de integración
- Vuelva a implementar la API
Tuve el mismo problema para integrarme con mi servidor Tomcat, encontré a continuación los cambios necesarios para solucionarlo.
-
Agregar Tipo de contenido en tu api Encabezados de solicitud HTTP en la puerta de enlace api por consola o agréguelo en la documentación abierta de api como
{ "/yourApi": "post": "operationId":"uploadImageUsingPOST", "produces":[ "application/json" ], "parameters":[ "name":"Content-Type", "in":"header", "required":false, "type":"string" , //Other headers ]
-
El paso anterior también agrega Content-Type en los encabezados HTTP de la solicitud de integración de su API, si no, agréguelo allí también y agregue un encabezado más Aceptar =’/‘ en la puerta de enlace api por consola o agréguelo en la documentación abierta de api como
"requestParameters": "integration.request.header.Accept":"'*/*'", "integration.request.header.Content-Type":"method.request.header.Content-Type", //Other headers
-
Establezca Manejo de contenido como Passthrough en la solicitud de integración de su API.
-
Agregue multipart/form-data como tipos de medios binarios en la configuración de su API a través de la consola o mediante la documentación de API abierta
"x-amazon-apigateway-binary-media-types": [ "multipart/form-data" ]
-
Implemente los cambios anteriores en la etapa deseada donde va a cargar la imagen como varias partes.
La puerta de enlace Api pasará su archivo multiparte como binario array y aún puede usar @RequestBody MultipartFile multipartFile en su controlador y Spring analizará este binario en varias partes por usted.
Agradecemos que desees añadir valor a nuestro contenido aportando tu experiencia en las explicaciones.