5 ruby-on-rails image mime-types ruby-on-rails-5
这是使用Rails 5和ruby-filemagic.目前我正在将上传的图像保存到我的数据库中,除了它的mime类型.我的控制器中有这个代码
def create
@person = Person.new(person_params)
if @person.image
cur_time_in_ms = DateTime.now.strftime('%Q')
file_location = "/tmp/file#{cur_time_in_ms}.ext"
File.binwrite(file_location, @person.image.read)
fm = FileMagic.new(FileMagic::MAGIC_MIME)
@person.content_type = fm.file(file_location, true)
end
if @person.save
redirect_to @person
else
# This line overrides the default rendering behavior, which
# would have been to render the "create" view.
render "new"
end
end
Run Code Online (Sandbox Code Playgroud)
困扰我这种方法的事情是,我必须在确定其mime类型之前将文件写入文件系统.这似乎很浪费.如何在不先创建文件的情况下找出mime类型?
编辑:为了回答给出的答案,我重新安排了一些事情,但是现在"content_type"变成了"application/x-empty",即使我上传了一个有效的png文件.这是代码
if @person.image
cur_time_in_ms = DateTime.now.strftime('%Q')
file_location = "/tmp/file#{cur_time_in_ms}.ext"
File.binwrite(file_location, @person.image.read)
file = File.open(file_location, "rb")
contents = file.read
# Scale image appropriately
#img = Magick::Image::read(file_location).first
@person.content_type = FileMagic.new(FileMagic::MAGIC_MIME).buffer(@person.image.read, true)
@person.image = contents
Run Code Online (Sandbox Code Playgroud)
假设你是通过 html 表单上传文件,IO 对象应该已经有 mime 类型,你可以这样得到:
mime = params[:file].content_type
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |