2017-04-10 74 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。 –