Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将blob上载到JAVA服务器API时收到400个错误请求_Java_Ajax_Html5 Canvas_Multipartform Data_Jersey 2.0 - Fatal编程技术网

将blob上载到JAVA服务器API时收到400个错误请求

将blob上载到JAVA服务器API时收到400个错误请求,java,ajax,html5-canvas,multipartform-data,jersey-2.0,Java,Ajax,Html5 Canvas,Multipartform Data,Jersey 2.0,我正试图上传一个裁剪过的图像,将其作为一个blob发送,并得到一个400 http错误。 仔细检查时,我注意到以下异常: java.lang.IllegalStateException:实体输入流已关闭 JavaScript代码: var fd = new FormData(); fd.append("pic", cblob); //append the blob $.ajax("/wsbasestructure/ws/users/test", { data: fd, type: "PU

我正试图上传一个裁剪过的图像,将其作为一个blob发送,并得到一个400 http错误。 仔细检查时,我注意到以下异常:

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;
}
我错过了什么? 感谢您抽出时间。

请参阅:

您需要将表单设置为多部分/表单数据内容类型。 因此,您需要:

contentType: multipart/form-data
也许你应该改变网络服务

试试这个:

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

来源:

这似乎不是你所指出的。仍然得到相同的异常。(我忘了在我已经尝试过的问题中描述)您是否也尝试添加注释@Consumes(MediaType.MULTIPART\u FORM\u DATA\u TYPE)?是的,它是在类本身中定义的。我不认为这与多部分定义有关,因为当我发送这样的文件时,
$(“#input”)[0]。文件[0]
。它起作用了。我在上传blob时遇到了这个问题,我真的需要上传这个从html5画布中提取的blob。变量cblob是如何初始化的?我是这样初始化这个变量的:
function canvasToBlob(canvas,type){var byteString=atob(canvas.toDataURL().split(“,”[1]),ab=new arrarybuffer(byteString.length),ia=newuint8array(ab),i;for(i=0;i
。我遗漏了什么吗?是
httpput
还是
POST
Ajax
代码片段中?@harshavmb,PUT。