2014-11-25 112 views
2

我在服务器端使用streaming response - 正在运行sinatra。javascript(sinatra's)流式响应保存文件

如何以某种方式处理客户端文件下载(javascript + angular),即我的流式响应不会首先完全加载并且仅在事后才会保存到文件中?

我当前的impl。类似于这样一个(使用FileSaver):

$http.post('/foo', bar) 
     .success(function (data) { 
      var blob = new Blob([data], {type: "text/plain;charset=utf-8"}); 
      saveAs(blob, 'A.csv'); 
     }). 

不过我觉得响应会下载完全第一和节省事后才提供。

事情是,下载的文件可能很大,所以只是想为最终用户提供快速响应。

回答

1

那么,following answer似乎说我在这里错过了。

在客户端,我结束了解决方案,即在普通的旧的HTML的方式提交

<form method='POST' action="/foo"> 
    ... 
    <button type="submit" ...>Submit</button> 
</form> 

其中在服务器端,我用正确的内容类型:

post '/foo' do 
    ... 
    content_type 'application/download' 

事情似乎工作比我原先预想的要简单得多。

UPDATE:

更propper way found(我可以指定文件名以及使用正确的内容类型):

post '/foo' do 
    ... 
    content_type 'text/plain' 
    headers["Content-Disposition"] = "attachment; filename=foo.txt"