13

我正在寻找一种下载 xml 文件的方法。我用:

file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"

但这总是给我下载一个空文件。该文件本身有 16 KB 的数据...

这是为什么?

前知

4

5 回答 5

24

可能你必须注释掉

config.action_dispatch.x_sendfile_header = "X-Sendfile"

在生产中.rb

有关解释,请参见http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/

于 2010-12-23T10:14:44.600 回答
4

问题已保存,但我不知道为什么

File.open(file_path, 'r') do |f|
  send_data f.read, :type => "text/xml", :filename => "10.xml"
end

send_data 正在工作......但 send_file 没有!

于 2010-08-11T07:26:05.483 回答
4

正如 Eugene 在他的回答中所说,在生产环境中,Rails 将让 Apache 或 nginx 使用 x-sendfile 为您发送实际文件,如果您不使用其中任何一个作为 rails 的基础设施,您必须注释掉建议的行在里面

config/environments/production.rb 文件。

# config.action_dispatch.x_sendfile_header = "X-Sendfile"
于 2011-02-22T16:19:42.117 回答
3

您必须在以下位置启用 sendfile 使用./config/environments/production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile"

如果该行不存在(或被注释掉),那么 Rails 将正确发送文件,但不会通过 Apache。

如果您获得的是 0 字节文件,请确保您已安装mod_xsendfile,可从https://tn123.org/mod_xsendfile

下载单个源文件 ( mod_xsendfile.c) 并编译 ( apxs -cia mod_xsendfile.c)。您可能希望以apxsroot 身份运行,以便正确设置所有内容。

然后,您将要在 Apache 配置文件中设置XSendFileXSendFilePath选项。有关详细信息,请参阅上述 URL 中的帮助。

于 2012-02-21T07:21:58.710 回答
0

在我的情况下,同样的事情发生了。我正在发送文件并删除它。
就像这里

File.open(file_path, 'r') do |f|      
  send_data f.read, filename: 'my_file.docx' , type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', disposition: 'attachment'
end
File.delete(file)

filename: 'my_file.docx'

拯救我的一天

于 2021-03-25T17:01:46.370 回答