Как обрабатывать загрузку файлов multipart/form-data с помощью micronaut-function-aws-api-proxy

Я использую micronaut1.1.0.RC2 а также micronaut-function-aws-api-proxy1.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? Любая помощь приветствуется!

0 ответов

Другие вопросы по тегам