我已经在文件下载的角度编写了一个应用程序,该应用程序仅适用于小型json字符串,但是大型字符串下载失败。任何人都可以告诉我一些解决方案。
我正在使用REST webservice
var json = _.getJson(); // here json value object be received from a script function
var myURL = 'rest/myMethod?jsonValue=' + JSON.stringify(json);
_.downloadFile(myURL);
downloadFile方法:
downloadFile: function(URL)
{
$.fileDownload(URL).done(function(e, response)
{
console.log('download success');
}).fail(function(e, response)
{
console.log('fail');
});
}
答案 0 :(得分:1)
我发现了两个潜在的问题:
如果网址太长,您必须将jsonValue
移到请求正文中,而不是将其作为网址参数传递。
要解决第二个问题,您需要对字符串化值进行URI编码:
var myURL = 'rest/myMethod?jsonValue=' + encodeURIComponent( JSON.stringify(json) );
BTW,查看失败的参数应该首先指示为什么请求失败。
答案 1 :(得分:1)
根据评论,这里是如何使用Angular进行POST。我只能举个例子。标题可能取决于角度版本等等。
function TestController($scope, $http) {
$http({
url: 'yourwebsite',
method: "POST",
data: json, //this is your json data string
headers: {
'Content-type': 'application/json'
}
}).success(function (data, status, headers, config) {
//upload succesfull. maybe update scope with a message?
}).error(function (data, status, headers, config) {
//upload failed
});
}
答案 2 :(得分:0)
以下是使用$ http的Angular发送帖子请求并从服务器下载XML文件的示例。
$http({
url: '$your_URL_here$', // you should replace $your_URL_here$ by your own url
method: 'POST',
responseType: 'arraybuffer',
data: postJson, //***this is the request json data for post***
headers: {
'Content-type': 'application/json',
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
}).success(function(data){
var blob = new Blob([data], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
saveAs(blob, $fileName$);// you should replace $fileName$ by your own fileName
}
}).error(function(data){
//Some error handling method here
});

请注意,您应该导入FileSaver.js以保存来自' arraybuffer'的responseType。