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

标签 javascript java angularjs http

我正在开发一个使用不同服务 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 服务文件请求时,我得到:错误 400(错误请求)如果服务有一个 Content-Type = multipart/form-data

如果服务的 Content-Type = "application/x-www-form-urlencoded; charset = utf-8"或 "application/json; charset = utf- 8”或“应用程序/表单数据”。

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

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

我应该如何格式化数据以发送到 rest 调用?

Content-Type 应该如何出现在标题中?

最佳答案

如何使用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"
});

将内容类型 header 设置为undefined 很重要。通常 $http service将内容类型设置为 application/json。当内容类型为 undefined 时,XHR API将使用适当的 multi-part boundary 自动将内容类型设置为 multipart/form-data .

关于javascript - 如何使用 AngularJS $http 发送 multipart/form-data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44725549/

相关文章:

Javascript - 用不同的值替换具有相同类的元素

java - 一种在终端中居中对齐文本的方法?

java - 无法解密和读取加密的图像文件

Java 在映射中存储值

android - 如何将 Mailchimp 与 Ionic 应用程序集成?

javascript - 火狐。类型错误 : 0 is read-only

javascript - 当浏览器禁用 JavaScript 时如何发送 PUT 和 DELETE?

javascript - 如何链接来自不同 Controller /位置的 AngularJS Promise?

javascript - session 无法通过页面刷新恢复 - 无限嵌套的对象

AngularJS HTML5 模式在手动 url 更改时重新加载整个页面