javascript保存文件(sinatra的)流媒体响应

时间:2014-11-25 09:22:46

标签: javascript angularjs file save streaming

我在服务器端使用streaming response - 运行sinatra。

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

我目前的意见。看起来与此类似(使用FileSaver):

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

我仍然觉得响应首先完全下载,然后才提供保存。

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

1 个答案:

答案 0 :(得分:1)

好吧,following answer似乎说我错过了这里。

在客户端,我最终得到了解决方案,用简单的旧HTML方式提交

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

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

post '/foo' do
  ...
  content_type 'application/download'
事情似乎比我原先预期的要简单得多。

<强>更新

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

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