2011-05-27 271 views
4

我正在使用send_file方法下载文件。它在我的本地机器上正常工作。但它不在服务器上工作 - 它返回一个空白文件。Ruby on Rails - send_file

代码:

send_file Rails.root.join('public', 'uploads') + (uploaded_file.original_filename + ".filtered") 

请帮助。

+1

请问文件中。即如果你goto yourdomain/public/uploads/filename.filtered它的工作? – Yule 2011-05-27 13:07:11

回答

4

根据您使用的是什么Web服务器,您可能必须更改您的config/environments/production.rb中的发送文件设置。

例如,对于nginx,您需要取消注释出这一行:

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' 
+1

非常感谢亚伦。它现在有效。 – Sayuj 2011-05-27 14:25:30

+0

谢谢你,好的回答。保存我的时间。 – HelloWorld 2012-03-05 14:41:45

1

尝试:

send_file Rails.public_path.join('uploads', "#{uploaded_file.original_filename}.filtered") 

还要注意的是,如果你有public目录,这些可以直接将早餐中的文件,所以你可以重定向到该项目的生成的URL(尽管这可能不是很REST- FUL)。


编辑:

由于非标“.filtered”扩展名的文件,你可能需要做一些事情,如:

send_file Rails.public_path.join('uploads', "#{uploaded_file.original_filename}.filtered"), :type => 'application/xml', :disposition => 'attachment' 

更改:type值相匹配的内容类型正在提供的文件。

+0

我试过这个,但不起作用。 – Sayuj 2011-05-27 13:12:57

+0

正如上面提到的@Yule,你是否检查过该文件存在于该位置?另外,服务器进程是否可以读取目录? (请注意,服务器进程可能在像www-data这样的用户下运行) – Jits 2011-05-27 13:17:32

+0

@jits非常感谢您的支持。 那个不行。任何其他选项? – Sayuj 2011-05-27 13:17:59