5

我正在使用AWS API Gateway 代理micronaut 1.1.0.RC2并在其中使用 Kotlin Lambda 函数。micronaut-function-aws-api-proxy 1.1.0.RC3micronaut 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 Gateway 上设置了二进制媒体类型。我尝试使用主要 micronaut 文档( https://docs.micronaut.io/1.1.0.RC2/guide/index.html )中描述的CompletedFileUpload类型和类型,结果相同。StreamingFileUpload

对于它的价值,我使用 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

有其他人对此有任何运气吗?micronaut api网关代理目前不支持它吗?任何帮助表示赞赏!

4

0 回答 0