2014-11-25 41 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"