RubyZip превращает JPG в «не JPG, начинается с 0x89» - PullRequest
0 голосов
/ 21 июля 2010

Я использую RubyZip для сжатия набора изображений (загруженных с помощью Paperclip) и позволяю пользователю загружать их в один файл, и все работает нормально, пока я не приду, чтобы открыть изображение.Он не будет отображаться, и при попытке в Ubuntu я получаю сообщение об ошибке:

 "Error interpreting JPEG image file (Not a JPEG file: starts with 0x89..."

Таким образом, пользователь загружает папку, заполненную файлами с правильными именами пользователей, но которую при открытии невозможно отобразить, посколькуне отображать их «формат».

контроллер:

 def zip

  @product = Product.find(params[:id])
  t = Tempfile.new(@product.random+rand(200).to_s)
  Zip::ZipOutputStream.open(t.path) do |z|
    @product.assets.each do |img|
        img_path = "#{RAILS_ROOT}"+"/public"+img.data.url(:original)
        file = File.open(img_path.split('?')[0])

        z.put_next_entry(img.id.to_s+"_original.jpg")
        z.print IO.read(file.path)
    end
  end
send_file t.path, :type => 'application/zip', :disposition => 'attachment', :filename => "#{@product.random}-#{rand(9999).to_s}.zip"

 end

Спасибо!

1 Ответ

0 голосов
/ 21 июля 2010

0x89 означает, что это PNG .Либо он конвертируется вашим процессом, либо это не JPEG с самого начала.

...