我的情況: 我有基於RubyOnRails的應用程序。 我使用Carrierwave進行圖片上傳。如何檢測沒有擴展名的圖像的擴展名?
我有很多文件保存沒有擴展錯誤。 因此,所有這些都有content_type與空值
有沒有辦法恢復這些圖像的擴展名?
感謝
我的情況: 我有基於RubyOnRails的應用程序。 我使用Carrierwave進行圖片上傳。如何檢測沒有擴展名的圖像的擴展名?
我有很多文件保存沒有擴展錯誤。 因此,所有這些都有content_type與空值
有沒有辦法恢復這些圖像的擴展名?
感謝
您可能需要從文件簽名來推斷:http://en.wikipedia.org/wiki/List_of_file_signatures
您可以嘗試使用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」)。然後用擴展名重命名文件。默認情況下,它只是打印出命令,所以取消註釋,如果你感到高興,它是做正確的事情。