[英]Send a zipped post request from angularjs using $http
I'm using $http on angularjs, and I have a fairly big request to send. 我在angularjs上使用$ http,我有一个相当大的请求发送。
I'm wondering if there a way to do something like this: 我想知道是否有办法做这样的事情:
content = "I'm a very long content string!"
$http.post content, url, 'gzip'
and have the post request content auto-gzipped and add an appropriate request header, so the server will know to unzip the content and pass it correctly to the controller 并将post请求内容自动gzip并添加适当的请求标头,以便服务器知道解压缩内容并将其正确传递给控制器
I can gzip the content on my side, and re-open it manually on the server, but I thought there should be some way to do it automatically. 我可以在我这边gzip内容,并在服务器上手动重新打开它,但我认为应该有一些方法自动执行它。 Is there?
在那儿?
See this post, like that you could give a parameter on the model so the server can decide if the content is a file and if the file should be unziped first 看到这篇文章,就像你可以在模型上给出一个参数,以便服务器可以决定内容是否是文件,以及文件是否应首先解压缩
function Ctrl($scope, $http) {
//a simple model to bind to and send to the server
$scope.model = {
gzip: true,
file: true
};
//an array of files selected
$scope.files = [];
//listen for the file selected event
$scope.$on("fileSelected", function (event, args) {
$scope.$apply(function () {
//add the file object to the scope's files collection
$scope.files.push(args.file);
});
});
//the save method
$scope.save = function() {
$http({
method: 'POST',
url: "/Api/PostStuff",
//IMPORTANT!!! You might think this should be set to 'multipart/form-data'
// but this is not true because when we are sending up files the request
// needs to include a 'boundary' parameter which identifies the boundary
// name between parts in this multi-part request and setting the Content-type
// manually will not set this boundary parameter. For whatever reason,
// setting the Content-type to 'false' will force the request to automatically
// populate the headers properly including the boundary parameter.
headers: { 'Content-Type': false },
//This method will allow us to change how the data is sent up to the server
// for which we'll need to encapsulate the model data in 'FormData'
transformRequest: function (data) {
var formData = new FormData();
//need to convert our json object to a string version of json otherwise
// the browser will do a 'toString()' on the object which will result
// in the value '[Object object]' on the server.
formData.append("model", angular.toJson(data.model));
//now add all of the assigned files
for (var i = 0; i < data.files; i++) {
//add each file to the form data and iteratively name them
formData.append("file" + i, data.files[i]);
}
return formData;
},
//Create an object that contains the model and files which will be transformed
// in the above transformRequest method
data: { model: $scope.model, files: $scope.files }
}).
success(function (data, status, headers, config) {
alert("success!");
}).
error(function (data, status, headers, config) {
alert("failed!");
});
};
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.