Ruby on rails 如何在没有扩展的情况下检测图像的扩展?
我的情况: 我有一个基于RubyOnRails的应用程序。 我使用Carrierwave上传图像 我错误地保存了许多没有扩展名的文件。 因此,所有这些都具有空值的content_类型 有没有办法恢复这些映像的扩展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脚本来推断文件扩展
谢谢您可能需要从文件签名中推断出来:您可以尝试使用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
这是给医生的信