簡體   English   中英

Jersey異步處理分段上傳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM