【发布时间】:2018-08-03 14:46:58
【问题描述】:
我有一个文件 CRUD REST API,客户端可以在其中上传文件。这些文件最大可达 1 GB。
我想做的是在开始上传之前对其他事情(可能还有文件名)进行一些验证。但是 Jersey 的 FormDataMultiPart 在开始处理请求处理程序之前等待完全上传。
也许这就是 HTTP 的工作方式,但如果不是,我希望 Jersey 保留上传,直到我开始阅读 InputStream,从而节省大量精力和带宽。这可能吗?
当前代码:
@PUT
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(@NotNull FormDataMultiPart formDataMultiPart) {
validateOtherThings(); // throws validation errors
FormDataBodyPart formDataBodyPart = formDataMultiPart.getField("file");
String filename = formDataBodyPart.getContentDisposition().getFileName();
validateFilename(filename);
InputStream inputStream = formDataBodyPart.getValueAs(InputStream.class);
saveFile(filename, inputStream);
}
我试过了:
@PUT
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(@Context HttpServletRequest request) {
...
InputStream inputStream = request.getPart("file").getInputStream();
...
}
这实际上会立即进入方法,但在使用getPart("file") 和java.lang.IllegalStateException: No multipart config for servlet 时会失败。
【问题讨论】:
标签: java multipartform-data jersey-2.0 dropwizard