【发布时间】:2013-05-22 10:34:47
【问题描述】:
我的情况: 我有基于 RubyOnRails 的应用程序。 我使用 Carrierwave 上传图片。
我错误地保存了许多没有扩展名的文件。 所以,所有这些的 content_type 都是空值
有没有办法恢复这些图像的扩展?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby imagemagick carrierwave rmagick
我的情况: 我有基于 RubyOnRails 的应用程序。 我使用 Carrierwave 上传图片。
我错误地保存了许多没有扩展名的文件。 所以,所有这些的 content_type 都是空值
有没有办法恢复这些图像的扩展?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby imagemagick carrierwave rmagick
您可以尝试使用 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”)。然后它用扩展名重命名文件。默认情况下,它只是打印出命令,所以如果你满意,它会取消注释,它会做正确的事情。
【讨论】:
您可能必须从文件签名中推断出来:http://en.wikipedia.org/wiki/List_of_file_signatures
【讨论】:
【讨论】: