gpt4 book ai didi

ruby-on-rails - 如何在不写入文件的情况下找出 mime 类型?

转载 作者:行者123 更新时间:2023-12-04 18:21:28 26 4
gpt4 key购买 nike

这是使用 Rails 5 和 ruby​​-filemagic。目前,除了其 mime 类型之外,我还将上传的图像保存到我的数据库中。我的 Controller 中有此代码

  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

这种方法困扰我的事情是我必须在确定其 mime 类型之前将文件写入文件系统。那看起来很浪费。如何在不先创建文件的情况下找出 mime 类型?

编辑:为了回应给出的答案,我重新安排了一些东西,但现在即使我上传了一个有效的 png 文件,“content_type”也变成了“application/x-empty”。这是代码
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

最佳答案

假设你是通过 html 表单上传文件,IO 对象应该已经有 mime 类型,你可以这样得到:

mime = params[:file].content_type

关于ruby-on-rails - 如何在不写入文件的情况下找出 mime 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com