如何使用angularJS发送带有multipart / form-data的POST请求?

时间:2015-10-05 22:34:44

标签: angularjs

之前我曾经问过这样的事情,但这里的情况略有不同,还有更多细节。

我在服务器端有一个处理程序,它接受multipart / form-data POST请求。请求包含POST参数的数量和一个应包含图像文件的参数(最后一个参数可能存在或可能不存在)。如何使用angularJS发送此类请求?

我已经尝试了多种选项(所有这些选项都可以在没有文件上传的情况下知道),但它们都不起作用。我得错了结果,因为在HTTP请求中缺少Content-Type:multipart / form-data,或者从基于Jetty的Spark Web服务工具中获取异常(请求不要与Apache Spark混淆)听起来像#34; ..."缺少初始多部分边界......" - 取决于要求的详细信息。

我试过这个:

return $http({
            method: 'POST',
            url: editCompanyUrl,
            headers: {'Content-Type': 'multipart/form-data'},
            data: {
                token: token,
                userId: userId,
                companyId: companyId,
                companyName: $scope.companyName,
            },
            timeout: 500
        }).then(function (data) {
            console.log(data);
            //Store Company ID which is used for saving purposes
            //localStorage.setItem("companyId", data.data.Company.id);
            return data.data.Company;
        }, function (data) {
            console.log(data);
        })

这就是

return $http({
            method: 'POST',
            url: editCompanyUrl,
            headers: {'Content-Type': undefined},
            data: {
                token: token,
                userId: userId,
                companyId: companyId,
                companyName: $scope.companyName,
            },
            timeout: 500
        }).then(function (data) {
            console.log(data);
            //Store Company ID which is used for saving purposes
            //localStorage.setItem("companyId", data.data.Company.id);
            return data.data.Company;
        }, function (data) {
            console.log(data);
        })
你可以帮忙吗?发送多部分请求的正确方法是什么?

谢谢。

亲切的问候,Artem。

2 个答案:

答案 0 :(得分:0)

$ http提供了一个选项:参数

使用参数:代替数据

        $http({
            url: url,
            method: "POST",
            params: {
             token: token,
             userId: userId,
             companyId: companyId,
             companyName: $scope.companyName,
           },
        }).success(function(data, status, headers, config) {
            //SUCCESS
          }).
        error(function(data, status, headers, config) {
            //ERROR
       });

答案 1 :(得分:0)

您能告诉我们完整的错误吗?还有你的服务器端代码。要在Spark中获取多部分内容,您必须在服务器端使用它:

  MultipartConfigElement multipartConfigElement = new MultipartConfigElement("Yourstoragedirectory");
  request.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement);
  System.out.println(request.raw().getPart("file"));

另外请确保您拥有最新版本的spark。