我正在开发一个使用不同服务的图形界面(用java编写)。 我必须打电话给这样的服务:
@PUT
@Path("nomeServizio")
public Response nomeServizio(final FormDataMultiPart multiPart) {
......}
致电服务:
service: function (data) {
return $http({
url: PATH_REST_SERVICES + '/nomeServizio',
headers: {"Content-Type": "multipart/form-data"},
data: data,
method: "PUT"
});
}
当我从Angularjs服务文件请求时,如果服务具有Content-Type = multipart / form-data
,我得到:错误400(错误请求)如果服务具有Content-Type =" application / x-www-form-urlencoded,则会收到415(不支持的媒体类型)错误; charset = utf-8"或" application / json; charset = utf-8"或者" application / form-data"。
我正在使用javascript和html5开发前端,我没有在网页上找到任何可以帮助我的内容,因为在JavaScript中不存在FormDataMultiPart对象。
我尝试格式化数据以多种方式发送,但它总是返回400或415。
如何格式化要发送到其余通话的数据?
内容类型应该如何包含在标题中?
答案 0 :(得分:3)
FormData interface提供了一种方法,可以轻松构建一组表示表单字段及其值的键/值对,然后可以使用XHR Send方法轻松发送。如果编码类型设置为multipart/form-data
,它将使用与表单相同的格式。
var formData = new FormData();
formData.append('type', type);
formData.append('description', description);
formData.append('photo', photo);
return $http({
url: PATH_REST_SERVICES + '/nomeServizio',
headers: {"Content-Type": undefined },
data: formData,
method: "PUT"
});
将内容类型标头设置为undefined
非常重要。通常,$http service会将内容类型设置为application/json
。当内容类型为undefined
时,XHR API会自动将内容类型设置为multipart/form-data
,并使用正确的multi-part boundary。
答案 1 :(得分:0)
在java代码中你需要编写如下代码:
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
您可以参考以下示例和链接: -
https://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/