【问题标题】:Rails using send_file to send multiple filesRails 使用 send_file 发送多个文件
【发布时间】:2012-05-24 08:12:01
【问题描述】:

我目前正在尝试使用 Rails send_file 方法在我的应用程序之外发送多个文件。它遍历所有文件,但只发送目录中的最后一个文件。这是我的代码。

  Dir.foreach(@dir) do |entry|
    if entry != "." && entry != ".." && entry != ".DS_Store" && entry != ".title"
      send_file(@dir + entry, :disposition => 'inline')
      logger.info("File: " + @dir + entry)
    end
  end

感谢任何帮助!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    send_file 告诉控制器它应该通过发送文件来响应浏览器的请求。 -- 与渲染视图、发送 JSON 等相反。

    通常情况下,您在 HTTP 中只发送一个响应。 (我省略了对长轮询和其他深奥类型响应的讨论。我也省略了目前通常不支持的 HTTP 多部分响应。)

    由于您只能发送一个文件,因此请重视!一个文件可以是多个文件的 zip,但随后用户需要解压缩它们。

    另一种方法是在网页上显示多个下载链接,邀请用户一个接一个地下载以完成多个下载。

    作为 UX(用户体验)示例:向自己发送一封包含多个附件的电子邮件。然后使用 GMail 并查看它们如何呈现多个文件供您下载。

    【讨论】:

    • HTTP 具有多部分响应,因此虽然单个请求会得到单个响应,但返回的不一定是单个文档。不幸的是,浏览器对多部分消息的支持非常糟糕,但暗示这是 HTTP 的限制是不正确的。
    • @coreyward -- 关于协议规范的要点。我已经更新了答案。
    • @LarryK 如何使用 send_file 在网页上显示多个下载链接。当我尝试这样做时,我得到了一个 DoubleRenderError。
    • 您的页面上会有多个链接。每个链接用于不同的下载。第一个链接将下载文件a,第二个链接用于文件b。对链接的每个响应都使用 send_file 返回 1 个文件。
    【解决方案2】:

    您只能在单个请求中发送单个文件;如果您想发送多个文件,您需要将它们压缩或以其他方式捆绑它们。

    【讨论】:

    • 您能详细说明一下吗?如果我想使用 send_data 将多个文件发送到浏览器。我该怎么办?我会单独压缩它们并将压缩文件传递给send_data吗?提前谢谢
    • @JoelL 这就是我在答案中所说的;您可以将它们捆绑在一起发送。
    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 2011-06-18
    • 2017-09-24
    • 2011-03-28
    • 1970-01-01
    • 2019-05-13
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多