2012-07-25 51 views
12

我正在开发一个需要文件上传/下载的Ruby on Rails应用程序。对于上传部分,我使用了宝石载波,因为它非常易于使用和灵活。问题是:一旦我上传文件,我需要知道一些事情:即如果它是一个PDF而不是下载文件,我显示它内联,并且图像也是如此。如何获得文件扩展名,我怎么能这样做发送文件给用户?任何反馈表示赞赏谢谢!Carrierwave如何获得文件扩展

回答

30

确定文件的扩展名(我想为安装上传者的名字是“文件”):

file = my_model.file.url 
extension = my_model.file.file.extension.downcase 

然后准备哑剧和处置瓦尔:

disposition = 'attachment' 
mime = MIME::Types.type_for(file).first.content_type 

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf" 
    disposition = 'inline' 
end 

(如果要添加其他扩展名) 。

然后发送文件:

send_file file, :type => mime, :disposition => disposition 
+0

非常感谢你,我喜欢你的解决方案的风格,它的工作完美。再次感谢您的回复! – Wiggin 2012-07-25 09:19:55

+0

哪里确切地在rails项目文件中放置了处置和MIME类型变量? – maumercado 2012-10-12 02:02:15

2

一旦你上传了一个文件,名字就存储在数据库中。这也包括扩展。假设你有一个User模型安装为asset的上传,那么你就可以得到它为:

user.asset.file.extension 

至于它发送给用户,如果你调用user.asset_url,它会给你的URL文件所在上传。用户可以使用该链接来获取文件。或者我误解了“将文件发送给用户”的含义?

+0

感谢回答!好吧,我想让用户下载文件。你知道,donwload对话框(打开..或保持它或铬案例保持或拒绝。)我认为用一个简单的send_file带参数会没事的。 – Wiggin 2012-07-25 08:57:39

+0

那么,只需链接到该文件。你可以通过'user.asset_url'获得URL。 – 2012-07-25 09:15:49

+0

是的,我做到了!你的建议工作完美,非常感谢! – Wiggin 2012-07-25 09:19:23

相关问题