[英]Jersey handling multi-part upload asynchronously
我有一個文件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();
...
}
實際上,這立即進入方法,但是在使用java.lang.IllegalStateException: No multipart config for servlet
執行getPart("file")
時失敗java.lang.IllegalStateException: No multipart config for servlet
。
不知道有沒有可能 查看帶有文件的POST請求示例: https ://stackoverflow.com/a/23517227/158037-Jersey在創建FormDataMultiPart對象之前,需要閱讀整個請求以了解存在哪些字段。 我想可以使用Servlet(doPut())並使用https://github.com/synchronoss/nio-multipart之類的方法手動解析傳入的數據,但是我懷疑這樣做是否值得。 接收整個文件之后,在發送之前和在服務器端進行客戶端驗證即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.