Код состояния 422 Unprocessable Entity — Paperclip, ImageMagick и Rails 3

Я не уверен, что вызывает это, и хотел бы получить некоторое представление:

Started POST "/uploads.js" for 127.0.0.1 at 2011-02-21 09:14:36 -0500
  Processing by UploadsController#create as JS
  Parameters: {"name"=>"DSC_0561.JPG", "chunk"=>"0", "chunks"=>"1", "upload"=>{"stage_id"=>"16"}, "authenticity_token"=>"SfNGZm4lP56eG94OliSo2Kk9Tikg+X2pHaGoRLdbUmg=", "file"=>#<ActionDispatch::Http::UploadedFile:0x000001080f7ce8 @original_filename="DSC_0561.JPG", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"DSC_0561.JPG\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/var/folders/+u/+u1vHpefHhSOuO43TGuqe++++TI/-Tmp-/RackMultipart20110221-9189-1ig5c62>>}

[paperclip] identify -format %wx%h '/var/folders/+u/+u1vHpefHhSOuO43TGuqe++++TI/-Tmp-/stream20110221-9189-1o6ij3e.JPG[0]' 2>/dev/null
[paperclip] convert '/var/folders/+u/+u1vHpefHhSOuO43TGuqe++++TI/-Tmp-/stream20110221-9189-1o6ij3e.JPG[0]' -resize "64x64" '/var/folders/+u/+u1vHpefHhSOuO43TGuqe++++TI/-Tmp-/stream20110221-9189-1o6ij3e20110221-9189-kssuro' 2>/dev/null
Completed 422 Unprocessable Entity in 1143ms (Views: 0.8ms | ActiveRecord: 1.5ms)

Не уверен, что Paperclip выдает эту ошибку, или это ImageMagick или что-то еще.

Edit1: Похоже, что он выдавал эту ошибку, потому что файл, который я загружал, имел расширение «.JPG», и как только я изменил его на «.jpg», это сработало. Но я не уверен, как это исправить правильно.


person marcamillion    schedule 21.02.2011    source источник


Ответы (1)


Rails, возвращающий код состояния 422, означает, что проверка не удалась, поэтому вы, вероятно, проверяете тип содержимого загрузки, но это всегда application/octet-stream, потому что то, что вы загружаете, не устанавливает его должным образом.

Вы можете использовать гем mime-types, чтобы исправить это, но в идеале вы должны исправить код загрузки, чтобы правильно установить тип MIME.

mime_types = MIME::Types.type_for(params[:file])
file.content_type = mime_types.first.to_s if mime_types.first
person Samuel    schedule 21.02.2011