我在play框架中有一个后端服务器,它以块的形式返回巨大的text / csv文件。 如何以角度接收文件以便能够将文件保存在客户端中。
在常规文件下载中,我可以使用以下解决方案:
$http.post('/exportFile', reqData).
success(function(data, status, headers, config){
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(data));
pom.setAttribute('download', "file.csv");
pom.click();
}).
error(function(data, status, headers, config){
alert(data);
});
但是如何处理大块? 谢谢!
答案 0 :(得分:2)
一些想法 -
默认情况下,angular和底层http堆栈将抽象" chunks"从你到单一的成功/失败回调。如果你真的想要块数据,你可能需要一个不同的URL方案来分页结果(然后发出一系列请求),或者像websockets这样的web-push方法(服务器推送每个位)。也许我错过了一些东西,但你是否尝试在/ exportFile请求完成后在angular内发出另一个请求?
$http.post('/exportFile', reqData).success(function(...){
// create url to where file.csv is, say fileURL
var fileUrl = encodeURIComponent(data);
$http.get(fileUrl).success(function(data...) {
// data is now the contents of file.csv.
fileContents = data;
});
}
CSV文件可能很容易压缩,但您可能已经这样做了。
最后,推荐的带有角度的MVC模式是在指令中构建元素并利用双向绑定。如果要通过以下方式在指令中立即触发下载,也可以单击该元素上的链接:
$timeout(function() {
angular.element(directiveElement).triggerHandler('click');
}, 0);
好的,希望有帮助