Javascript 如何使用AngularJS$http发送多部分/表单数据

Javascript 如何使用AngularJS$http发送多部分/表单数据,javascript,java,angularjs,http,Javascript,Java,Angularjs,Http,我正在开发一个使用不同服务rest(用java编写)的图形界面。 我必须调用这样的服务: @PUT @Path("nomeServizio") public Response nomeServizio(final FormDataMultiPart multiPart) { ......} @POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDa

我正在开发一个使用不同服务rest(用java编写)的图形界面。 我必须调用这样的服务:

@PUT
@Path("nomeServizio")
public Response nomeServizio(final FormDataMultiPart multiPart) {
......}
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream,
    @FormDataParam("file") FormDataContentDisposition fileDetail) {
电话服务:

service: function (data) {

            return $http({
                url: PATH_REST_SERVICES + '/nomeServizio',
                headers: {"Content-Type": "multipart/form-data"},
                data: data,
                method: "PUT"
            });
        }
当我从Angularjs服务文件请求时,如果服务的内容类型为multipart/form data,我会得到错误400(错误请求)

而如果服务的内容类型为“application/x-www-form-urlencoded;charset=utf-8”或“application/json;charset=utf-8”或“application/form-data”,则会出现415(不支持的媒体类型)错误

我正在用javascript和html5开发前端,我在web上找不到任何可以帮助我的东西,因为javascript中不存在FormDataMultiPart对象

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

我应该如何格式化发送给rest呼叫的数据?


以及标题中的内容类型应如何?

在java代码中,您需要编写如下代码:

@PUT
@Path("nomeServizio")
public Response nomeServizio(final FormDataMultiPart multiPart) {
......}
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream,
    @FormDataParam("file") FormDataContentDisposition fileDetail) {
有关更多信息,请参考以下示例和链接:-

如何使用AngularJS$http发送表单数据 提供了一种方法,可以轻松地构造一组表示表单字段及其值的键/值对,然后可以使用该方法轻松地发送。如果编码类型设置为
multipart/formdata
,它将使用与表单相同的格式

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"
});

将内容类型标题设置为
未定义
,这一点很重要。通常,将内容类型设置为
application/json
。当内容类型为
未定义时
,将自动使用正确的设置将内容类型设置为
多部分/表单数据

问题是我无法更改我使用的其余服务。我应该找到一个解决方案,允许我(使用javascript或php)格式化FormDataMultiPart中的数据。