Ruby on rails 如何在Rails应用程序中检测文件类型?
我正在使用Carrierwave将图像、文档和视频上传到我的s3存储桶。到目前为止,上传图像和文档还可以 在我的视图中,我想做的是确定文件类型,然后显示图像(目前我可以这样做),或者提供文档的图像,单击该图像将为用户下载/打开该文件的副本 因此,在我看来,要渲染图像,我会这样做Ruby on rails 如何在Rails应用程序中检测文件类型?,ruby-on-rails,ruby,carrierwave,file-type,Ruby On Rails,Ruby,Carrierwave,File Type,我正在使用Carrierwave将图像、文档和视频上传到我的s3存储桶。到目前为止,上传图像和文档还可以 在我的视图中,我想做的是确定文件类型,然后显示图像(目前我可以这样做),或者提供文档的图像,单击该图像将为用户下载/打开该文件的副本 因此,在我看来,要渲染图像,我会这样做 <% document.each do |doc| %> <%= link_to image_tag(doc.media_url(:thumb)) %> <% end %>
<% document.each do |doc| %>
<%= link_to image_tag(doc.media_url(:thumb)) %>
<% end %>
但我该怎么说呢
<% document.each do |doc| %>
<% if doc.file_type == ['jpg', 'jpeg', 'png']
<%= link_to image_tag(doc.media_url(:thumb)) %>
<% else %>
<%= link_to doc.media.path %> # This link downloading the file
<% end %>
<% end %>
在linux中,我也相信Mac,有一个实用程序可以确定文件的类型:
$ file filename.jpg
filename: JPEG image data, JFIF standard 1.02
$ file ./шрифты/шрифты/page-0020.png
filename.png: PNG image, 2512 x 3270, 8-bit grayscale, non-interlaced
因此,在ruby
中,您可以发出%x()
方法来获取信息:
def type filename
res = %x(file "#{File.expand_path(filename)}")
m = res.match(/(.*): (.*)$/).to_a.last.split(' ').first.downcase
end
因此,它将返回:
type "filename.jpg" # => jpeg
type "filename.png" # => png
对于windows,有些人应该使用mingw
/cygwin
安装。在linux中,我也相信Mac,有一个实用程序可以确定文件的类型:
$ file filename.jpg
filename: JPEG image data, JFIF standard 1.02
$ file ./шрифты/шрифты/page-0020.png
filename.png: PNG image, 2512 x 3270, 8-bit grayscale, non-interlaced
因此,在ruby
中,您可以发出%x()
方法来获取信息:
def type filename
res = %x(file "#{File.expand_path(filename)}")
m = res.match(/(.*): (.*)$/).to_a.last.split(' ').first.downcase
end
因此,它将返回:
type "filename.jpg" # => jpeg
type "filename.png" # => png
对于windows,有些人应该使用mingw
/cygwin
安装。我猜(让其他人猜你应该在问题中提供什么不是一件好事)你有一个模型文档,你的上传器是媒体,类似这样:
class Document < ActiveRecord::Base
mount_uploader :media, MediaUploader
end
如果您需要,Carrierwave可以通过以下方式为您提供内容类型:
document.media.content_type # this returns image/png for a png file ...
编辑:
我认为更好的方法是这样检查(它更干净):
#此链接用于下载文件
我猜(让其他人猜你应该在问题中提供什么不是一件好事)你有一个模型文档,你的上传器是媒体,类似这样:
class Document < ActiveRecord::Base
mount_uploader :media, MediaUploader
end
如果您需要,Carrierwave可以通过以下方式为您提供内容类型:
document.media.content_type # this returns image/png for a png file ...
编辑:
我认为更好的方法是这样检查(它更干净):
#此链接用于下载文件
您能否将上传的文件视为文件系统上的文件?抱歉,但您能否进一步解释您能否将上传的文件视为文件系统上的文件?抱歉,但您能否进一步解释啊,谢谢,这更有意义。.下一步允许用户下载文档:)啊,谢谢,这更有意义..下一阶段允许用户下载文档:)