无法使用 RMagick 打开上传的图像文件

Maa*_*ten 2 ruby-on-rails rmagick imagemagick ruby-on-rails-4

在我的 Rails 应用程序中,我有一个允许用户上传图像的表单。我的应用程序应该使用以下控制器方法调整图像大小。(POST 到此方法,params[:file]包含ActionDispatch::Http::UploadedFile已上传的内容:

 def resize_and_store
    file = params[:file]

    # resize image
    Magick::Image.read(file.tempfile).first
    newimg = image.resize(100,100)

    #etc... Store newimg
  end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,行上写着Image.read

Magick::ImageMagickError (no decode delegate for this image format `0xb9f6052c>' @ error/constitute.c/ReadImage/544):
Run Code Online (Sandbox Code Playgroud)

使用上传的 PNG 文件对此进行测试,似乎 RMagick 没有识别出临时文件是 PNG 文件。如果我读取本地存储的 PNG 文件,上面的代码确实可以工作,所以不可能是我缺少 PNG 解码器。我该如何解决这个问题以及为什么会发生这种情况?

joo*_*ost 5

您可以from_blobActionDispatch::Http::UploadedFile参数执行以下操作(这就是文件的传入方式):

images = Magick::Image.from_blob(params[:file].read)
Run Code Online (Sandbox Code Playgroud)