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