2

我的情况:我有基于 RubyOnRails 的应用程序。我使用 Carrierwave 上传图片。

我错误地保存了许多没有扩展名的文件。因此,所有这些都具有空值的 content_type

有没有办法恢复这些图像的扩展?

谢谢

4

3 回答 3

2

您可以尝试使用 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”)。然后它用扩展名重命名文件。默认情况下,它只是打印出命令,所以如果你高兴它做正确的事情,请取消注释。

于 2013-05-22T10:54:09.520 回答
1

您可能必须从文件签名中推断出它:http ://en.wikipedia.org/wiki/List_of_file_signatures

于 2013-05-22T10:52:23.223 回答
1

你也可以试试

require 'RMagick'
puts Magick::Image::read(filename).first.format

这是文档的链接

于 2013-05-22T12:27:37.143 回答