从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.commonsMultipartStream 对此很有帮助。

这个解决方案感觉有点老套,但至少在我们更新到直接支持类似功能的更新版本之前是可行的。