我的情况:我有基于 RubyOnRails 的应用程序。我使用 Carrierwave 上传图片。
我错误地保存了许多没有扩展名的文件。因此,所有这些都具有空值的 content_type
有没有办法恢复这些图像的扩展?
谢谢
我的情况:我有基于 RubyOnRails 的应用程序。我使用 Carrierwave 上传图片。
我错误地保存了许多没有扩展名的文件。因此,所有这些都具有空值的 content_type
有没有办法恢复这些图像的扩展?
谢谢
您可以尝试使用 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