从 openapi 中的文件上传获取流

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。

fhu*_*ser 1

我现在找到的解决方法是ServletInpuStream直接从HttpServletRequestAPI 描述中获取并将正文保留为空,以防止在我主动执行此操作之前消耗流。这当然迫使我自己解析内容。我发现MultipartStream这apache.commons对此非常有帮助。

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