从Angular中的服务器下载text / csv内容作为大文件

时间:2014-09-12 17:26:55

标签: angularjs playframework-2.0 chunks

我在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);
            });

但是如何处理大块? 谢谢!

1 个答案:

答案 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);

好的,希望有帮助