如何使用AngularJS $ http发送multipart / form-data

我正在开发一个使用不同服务rest的图形界面(用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; charset = utf-8”或“application / json; charset = utf-8”,则会收到415(不支持的媒体类型)错误“申请/表格数据”。

我正在开发javascript和html5的前端,我没有找到任何可以帮助我的网络,因为在JavaScript中不存在FormDataMultiPart对象。

我试图格式化数据以多种方式发送,但它总是返回400或415。

我应该如何格式化数据以发送到其余的呼叫?

内容类型应该如何在标题中?

如何使用AngularJS $ http发送FormData

FormData接口提供了一种方法,可以轻松构造一组表示表单字段及其值的键/值对,然后可以使用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服务将内容类型设置为application/json 。 当内容类型undefined , XHR API将自动将内容类型设置为具有适当多部分边界的 multipart/form-data

在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/