Коротко: ваш файл определяется как JPEG, потому что начинается с той же сигнатуры, что и файлы этого типа.
Исправить такое поведение в Discourse возможно, но для этого потребуется модификация (см. в конце).
Немного технической информации.
Проблема возникает здесь:
Библиотека FastImage открывает файл и определяет его тип и размер.
Как вы и ожидали, она возвращает тип JPEG.
Теперь посмотрим, как FastImage определяет JPEG: это видно здесь:
Однако извлечь информацию об изображении нельзя, поскольку отсутствуют все необходимые байты.
Как исправить эту проблему в Discourse?
Изучив код FastImage, можно заметить полезный параметр, который можно передать.
Используя этот параметр, любая ошибка (SizeNotFound, ImageFetchFailure, CannotParseImage, UnknownImageType, BadImageURI) приведёт к отсутствию информации об изображении; и ваш файл не будет распознан как изображение.
@image_info =
begin
FastImage.new(@file, :raise_on_failure=>true)
rescue StandardError
nil
end
...
is_image ||= @image_info && FileHelper.is_supported_image?("test.#{@image_info.type}")