【发布时间】:2021-11-02 02:35:40
【问题描述】:
问题:Quarkus Resteasy 响应式是否可以立即开始处理上传文件而无需等待文件完全上传?
示例代码:
class FileUploadForm {
@RestForm
@PartType(MediaType.TEXT_PLAIN)
lateinit var title: String
@RestForm
@PartType(MediaType.TEXT_PLAIN)
lateinit var description: String
@RestForm
lateinit var file: FileUpload
}
@Path("/upload")
class UploadResource {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
suspend fun upload(form: FileUploadForm): Response {
val file = form.file.uploadedFile()
//... do processing only after upload
}
}
到目前为止我发现了什么:
- 对于上传,我们只能使用
FileUpload类型(最好有 Vert.xAsyncFile或类似的,它是流式下载顺便说一句的选项) - 有一个接口
org.jboss.resteasy.reactive.server.core.multipart.FormDataParser,您可以在其中修改多部分表单处理,但看起来默认实现由 Quarkus 管理,我不确定它是否易于配置。
【问题讨论】:
-
如果我理解正确的话,你想在文件上传完成之前调用你的
upload方法吗? -
据我所知,您需要在 tmp 中完全下载文件,然后才能在代码中处理请求,至少目前是这样,因为可能会有更多部分。
-
@geoand 基本上,是的,在将文件保存到临时目录之前执行处理会很棒。
-
@JavierToja 是有道理的,但是我们可以在收到最终的 HTTP 部分时立即开始处理部分并完成处理。
标签: resteasy quarkus multipart reactive