我的情况: 我有基于RubyOnRails的应用程序。 我使用Carrierwave进行图像上传。
我有很多文件保存没有扩展错误。 因此,所有这些都具有带空值的content_type
有没有办法恢复这些图片的扩展名?
由于
答案 0 :(得分:1)
您可能需要从文件签名中推断出来:http://en.wikipedia.org/wiki/List_of_file_signatures
答案 1 :(得分:1)
您可以尝试使用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”)。然后,它使用扩展名重命名该文件。默认情况下,它只是打印出命令,因此如果你感到满意,那就取消注意它正在做正确的事情。
答案 2 :(得分:1)