2017-04-10 73 views
0

我試圖上傳一個裁剪後的圖像,將它作爲一個blob發送並得到一個400 http錯誤。 仔細檢查時,我發現以下例外:上傳blob到JAVA服務器時得到400不良請求Jersey API

java.lang.IllegalStateException:實體輸入流已關閉。

的JavaScript代碼:

var fd = new FormData(); 
fd.append("pic", cblob); //append the blob 
$.ajax("/wsbasestructure/ws/users/test", { 
    data: fd, 
    type: "PUT", 
    processData: false, 
    contentType: false, 
    success: function (data) { 
    } 
}); 

的Java代碼:

@PUT 
@Path("/test") 
public String updatePic(@FormDataParam("pic") InputStream file){ 
    System.out.println(file); 
    return null; 
} 

缺少什麼我在這裏? 謝謝你的時間。

+0

是吧'HTTP PUT'或'Ajax'代碼片斷'POST'? – harshavmb

+0

@harshavmb,PUT。 –

回答

0

參見:

你需要你的表格是一個多部分/格式數據的內容類型。 所以你需要:

contentType: multipart/form-data 

也許你應該改變Web服務。

試試這個:

@PUT 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Path("/test") 
public String updatePic(
    @FormDataParam("pic") InputStream file, 
    @FormDataParam("pic") FormDataContentDisposition fileDisposition) { 
    ... 
} 

來源:Jersey doc

+0

這似乎不是你指出的。仍然得到相同的例外。 (我忘了在問題中描述過我已經嘗試過) –

+0

您是否還嘗試添加批註@Consumes(MediaType.MULTIPART_FORM_DATA_TYPE)? – fandango

+0

是的,它是在課堂上定義的。 我不認爲這是與多部分定義相關的事情,因爲當我發送像這樣的'$(「#input」)[0] .files [0]''的文件。有用。 我在上傳一個blob時遇到了這個問題,而且我真的需要上傳這個從html5畫布提取的blob。 –