我在服务器端使用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');
}).
我仍然觉得响应首先完全下载,然后才提供保存。
问题是,下载的文件可能很大,所以只想为最终用户提供快速响应。
答案 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"