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

Я использую 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? Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...