Ruby on rails 如何在没有扩展的情况下检测图像的扩展?

Ruby on rails 如何在没有扩展的情况下检测图像的扩展?,ruby-on-rails,ruby,imagemagick,carrierwave,rmagick,Ruby On Rails,Ruby,Imagemagick,Carrierwave,Rmagick,我的情况: 我有一个基于RubyOnRails的应用程序。 我使用Carrierwave上传图像 我错误地保存了许多没有扩展名的文件。 因此,所有这些都具有空值的content_类型 有没有办法恢复这些映像的扩展 谢谢您可能需要从文件签名中推断出来:您可以尝试使用unix命令file来检测MIME类型。例如: $ file -bi i_am_a_png image/png; charset=binary 这试图通过文件的签名(二进制结构)来确定文件类型 您可以运行如下bash脚本来推断文件扩展

我的情况: 我有一个基于RubyOnRails的应用程序。 我使用Carrierwave上传图像

我错误地保存了许多没有扩展名的文件。 因此,所有这些都具有空值的content_类型

有没有办法恢复这些映像的扩展


谢谢

您可能需要从文件签名中推断出来:

您可以尝试使用unix命令
file
来检测MIME类型。例如:

$ file -bi i_am_a_png
image/png; charset=binary
这试图通过文件的签名(二进制结构)来确定文件类型

您可以运行如下bash脚本来推断文件扩展名并相应地重命名文件:

#!/bin/bash

IFS=$"\n"
for f in *
do
  mime=`file -bi $f`
  if [ $? == 0 ]
  then
      ext=( $(echo $mime | awk -F ";" '{ gsub(".*/", ""); print $1}') )
      cmd="mv $f $f.$ext"

      echo $cmd
      # `$cmd`    # Uncomment when you're happy with the command output
  else
      echo "Could not detect file type"
  fi
done
它只是在当前目录中的文件中循环,运行
file-bi
,并获取字符串中可以传递扩展名的部分(“image/png”中的“png”)。然后用扩展名重命名文件。默认情况下,它只是打印出命令,因此取消注释,如果您满意它所做的事情是正确的。

您也可以尝试

require 'RMagick'
puts Magick::Image::read(filename).first.format
这是给医生的信