Angularjs 在同一请求中发送多种类型的内容
我正在使用angular 1.5,我必须点击一个服务来上传文件。在同一个服务中,我还必须将JSON作为请求体传递 当我使用Content-type:application/json multipart for file不起作用时,如果我使用Content-type:undefined,则multipart将起作用,但json-param不起作用。那么,有没有什么方法可以将json的键值对的值设置为多部分?或者有其他的方法吗Angularjs 在同一请求中发送多种类型的内容,angularjs,multipart,angular-http,request-headers,Angularjs,Multipart,Angular Http,Request Headers,我正在使用angular 1.5,我必须点击一个服务来上传文件。在同一个服务中,我还必须将JSON作为请求体传递 当我使用Content-type:application/json multipart for file不起作用时,如果我使用Content-type:undefined,则multipart将起作用,但json-param不起作用。那么,有没有什么方法可以将json的键值对的值设置为多部分?或者有其他的方法吗 谢谢这样试一下,你会很好的: $scope.uploadMultipar
谢谢这样试一下,你会很好的:
$scope.uploadMultipart = function(file, jsonObject, uploadUrl){
var formData = new FormData();
formData.append('json',JSON.stringify(jsonObject));
formData.append('file', file);
return $http({
url: uploadUrl,
method: 'POST',
data: formData,
headers: { 'Content-Type': undefined},
transformRequest: angular.identity
});
};
我不建议这样做,但这就是如何将文件添加为JSON对象的一部分。这样,您就可以在内容类型application/json中发布一个
对在这里,我们将向multipart追加一个字符串化的json。有相反的路吗?JSON中的多部分?@AmirSuhail为什么要这样做?使用这种多部分结构,即使后端处理JSON.parse也要容易得多-是的。但是后端必须在获得多部分时调用某个服务。如果我们执行上述操作,数据将以多部分参数的形式出现,而不是以请求体的形式出现。要获取请求正文中的数据,我需要这样做。对不起,我不理解新文件[new Blob[s]],文件Blob数组中的s是什么?它应该是新的Blob[json.stringfyfile]],对吗?@AmirSuhail我让它与FileReader一起工作。检查更新
$scope.uploadHack = function(file, jsonObject, uploadUrl){
var aReader = new FileReader();
aReader.readAsText(file, "UTF-8");
aReader.onload = function (evt) {
//append file to json as raw data
jsonObject.file = {
content: aReader.result,
name: file.name,
size: file.size
};
$http({
url: uploadUrl,
method: 'POST',
data: jsonObject,
headers: { 'Content-Type': 'application/json'},
transformRequest: angular.identity
});
}
};