Carrierwave如何获取文件扩展名(Carrierwave how to get the fi

2019-07-30 14:16发布

我正在开发一个Ruby on Rails应用程序需要的文件上传/下载。 对于上传的部分我用的宝石carrierwave因为它非常容易使用和灵活。 问题是:一旦我上传的文件,我需要知道的几件事:即,如果它是不是下载我展示它内嵌文件的PDF版本,和同样的图像。 我如何获得的文件扩展名 ,我怎么能做到这一点的文件发送给用户? 任何反馈表示赞赏谢谢!

Answer 1:

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

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


Answer 2:

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

user.asset.file.extension

至于它发送给用户,如果你调用user.asset_url ,它会给你在文件上传的URL。 用户可以使用该链接来获取文件。 还是我误解你的“发送文件到用户”是什么意思?



文章来源: Carrierwave how to get the file extension