Я использую 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 напрямую (без прокси-сервера AWS для микронавтов), онофункционирует отлично.Но при развертывании его в AWS возникает проблема с прокси-сервером micronaut aws, который неправильно анализирует составные данные формы.
У меня multipart/form-data
установлен как двоичный носительвведите в шлюз API.Я попытался использовать как тип CompletedFileUpload
, так и тип StreamingFileUpload
, как описано в основных документах по микронавтике (https://docs.micronaut.io/1.1.0.RC2/guide/index.html), с одинаковыми результатами.
И для чего это стоит, у меня естьдругая реализация этой же вещи с использованием прокси-сервера AWS spark (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? Любая помощь приветствуется!