fhu*_*ser 7 java openapi swagger-codegen
我有一个后端应用程序(Java 8)和一个 Angular 前端。现在,我使用 multipart/formdata 添加了文件上传。我们使用 openapi 来生成 api 代码。这是用于生成它的代码部分:
"post": {
...
"consumes" : [
"multipart/form-data"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "updateFile",
"in": "formData",
"type": "file",
"required": true,
}
],
...
}
Run Code Online (Sandbox Code Playgroud)
前端准备文件如下:
const formData = new FormData();
formData.append('updateFile', updateFile);
Run Code Online (Sandbox Code Playgroud)
这实际上工作得很好,并为我们提供了一个Part-Object。不幸的是,此代码将在生产中运行的机器非常弱,上传的文件太大而无法在其内存中处理(~130mb)。所以,我需要一个解决方法。我认为访问传入流将是一种将文件“即时”写入某个临时目录的优雅方式,而且我遇到过正是这样做的代码示例。我不知道如何配置我的端点以提供流而不是“完成的” Part-Object。
不幸的是,这个项目使用了一个相当老的 openapi 版本 2。
我现在找到的解决方法是ServletInpuStream直接从HttpServletRequestAPI 描述中获取并将正文保留为空,以防止在我主动执行此操作之前消耗流。这当然迫使我自己解析内容。我发现MultipartStream这apache.commons对此非常有帮助。
这个解决方案感觉有点老套,但至少在我们更新到直接支持类似功能的更新版本之前是可行的。