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

时间:2017-06-23 15:53:46

标签: javascript java angularjs http

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

如何格式化要发送到其余通话的数据?

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

2 个答案:

答案 0 :(得分:3)

如何使用AngularJS $ http发送FormData

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/