Я столкнулся с неприятной проблемой со скрепкой. Скрепка работает нормально при загрузке файлов jpg / gif, но она задыхается от файлов .targa с ошибкой «не распознана с помощью идентификации». Просто для подтверждения, она работает на 100% с файлами jpg / gif / png, и у меня установлен и работает imagemagick, эта ошибка возникает только с файлами .tga.
Общий процесс изготовления скрепки:
- Пользователь загружает файл
- Создается временный файл, содержащий содержимое этого файла.
- Команда идентификации запускается в файле Tempfile, чтобы получить ширину / высоту изображения.
В файлах jpg / png / gif идентификация может выполняться в файле без необходимости указывать допустимое расширение (например, .jpg), чтобы можно было распознать тип файла. Однако при идентификации файла .tga в имени файла требуется расширение .tga.
Проблема вот в чем:
Когда Paperclip создает временный файл, он создается с именем, похожим на: stream.0.1. Поскольку в этом временном файле отсутствует расширение .tga, команда identify не может проанализировать размеры изображения, что приводит к появлению сообщения «не распознается с помощью идентификации».
Я не уверен, как это исправить, лучшая идея, которую я могу придумать, - это использовать обычную команду File.new вместо Tempfile.new для создания временного файла со случайным именем, но с правильным расширением файла. Это потребует также внесения исправлений в пользовательский код для удаления файлов после обработки, вместо того, чтобы полагаться на встроенную способность Ruby удалять временные файлы после использования.
Есть ли у кого-нибудь идеи, как лучше всего это исправить?