Как обрабатывать загрузку файлов multipart/form-data с помощью micronaut-function-aws-api-proxy
Я использую micronaut
1.1.0.RC2
а также micronaut-function-aws-api-proxy
1.1.0.RC3
в прокси AWS API Gateway для функции Kotlin Lambda. Прокси-сервер micronaut aws api прекрасно работает для всех моих функций API, за исключением маршрута загрузки файла. Определение класса и маршрута выглядит примерно так:
@Controller("/things/{id}/attachments")
class AttachmentController {
@Post(consumes = [MediaType.MULTIPART_FORM_DATA])
fun post(request: HttpRequest<Any>, id: Int, file: CompletedFileUpload): Attachment? {
...
}
}
Работает локально, это отлично работает. Но когда я использую его через API Gateway и Lambda, я получаю следующую ошибку:
ERROR c.a.s.p.AwsProxyExceptionHandler Called exception handler for:
io.micronaut.web.router.exceptions.UnsatisfiedRouteException: Required argument [CompletedFileUpload file] not specified
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:279)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
...
Опять же, если я запускаю приложение micronaut локально и нажимаю на API напрямую (без прокси-сервера micronaut AWS), оно работает отлично. Но когда я развертываю его в AWS, возникает проблема с прокси-сервером micronaut aws, который неправильно анализирует составные данные формы.
я должен multipart/form-data
установить как двоичный тип носителя на шлюзе API. Я пытался использовать оба CompletedFileUpload
тип и StreamingFileUpload
введите, как описано в основных документах для микронавтов ( https://docs.micronaut.io/1.1.0.RC2/guide/index.html) с теми же результатами.
И что бы это ни стоило, у меня есть другая реализация этой же вещи, использующая прокси-сервер AWS (aws-serverless-java-container-spark), и он работает правильно.
Чтобы проверить, я запускаю команду curl:
curl -X POST https://<host>/things/42/attachments -H 'content-type: multipart/form-data' -F file=@/path/to/file.png
Кому-нибудь еще повезло с этим? Разве это не поддерживается в данный момент прокси-шлюзом api micronaut? Любая помощь приветствуется!