我正在开发一个需要文件上传/下载的 Ruby on Rails 应用程序。对于上传部分,我使用了 gem carrierwave,因为它非常易于使用且非常灵活。问题是:一旦我上传了文件,我需要知道一些事情:即如果它是 pdf 而不是下载文件,我会内联显示它,图像也是如此。如何获取文件扩展名以及如何将文件发送给用户?任何反馈表示感谢谢谢!
问问题
17958 次
2 回答
39
确定文件扩展名(我想挂载上传器的名称是“文件”):
file = my_model.file.url
extension = my_model.file.file.extension.downcase
然后准备 mime 和 disposition 变量:
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
于 2012-07-25T08:32:59.120 回答
5
上传文件后,名称将存储在数据库中。这也包括扩展名。假设您有一个User
安装了上传器的模型asset
,那么您可以将其获取为:
user.asset.file.extension
至于发送给用户,如果你调用user.asset_url
,它会给你上传文件的 URL。用户可以使用该链接来获取文件。还是我误解了“将文件发送给用户”的意思?
于 2012-07-25T08:30:23.980 回答