【问题标题】:javascript save file from (sinatra's) streaming responsejavascript 从(sinatra 的)流响应中保存文件
【发布时间】:2026-01-11 13:15:01
【问题描述】:

我在服务器端使用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');
        }).

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

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

【问题讨论】:

    标签: javascript angularjs file save streaming


    【解决方案1】:

    嗯,following answer 似乎说出了我在这里错过的一切。

    在客户端,我最终得到了解决方案,它以普通的旧 html 方式提交

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

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

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

    事情似乎比我最初预期的要简单得多。

    更新:

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

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

    【讨论】:

      最近更新 更多