【问题标题】:How to use AngularJS $http to send multipart/form-data如何使用 AngularJS $http 发送 multipart/form-data
【发布时间】:2017-06-23 15:53:45
【问题描述】:

我正在开发一个图形界面,它使用不同的服务 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-,我会收到 415(不支持的媒体类型)错误8”或“应用程序/表单数据”。

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

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

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

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

【问题讨论】:

    标签: javascript java angularjs http


    【解决方案1】:

    如何使用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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 问题是我无法更改我使用的其余服务。我应该找到一个解决方案,允许我格式化(使用 javascript 或 php)FormDataMultiPart 中的数据。
      猜你喜欢
      • 1970-01-01
      • 2014-05-13
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多