之前我曾经问过这样的事情,但这里的情况略有不同,还有更多细节。
我在服务器端有一个处理程序,它接受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。
答案 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。