一尘不染

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

angularjs

我正在开发使用不同服务其余部分的图形界面(用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。

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

内容类型应该在标题中吗?


阅读 324

收藏
2020-07-04

共1个答案

一尘不染

如何使用AngularJS $ http发送FormData

所述FORMDATA接口提供了一种容易地构成一组表示表单字段和它们的值,然后可以使用能够容易地发送的键/值对XHR发送方法。如果编码类型设置为,则使用与表单使用的格式相同的格式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。当内容类型为时undefinedXHRAPI将自动将内容类型设置为multipart/form-data具有适当的多部分边界

2020-07-04