Облачная загрузка jquery неправильно сохраняет image_id

Я использую Cloudinary с jquery для прямой загрузки изображения из браузера в приложение RoR. Думаю, я почти точно следовал инструкциям здесь.

Загрузка изображения работает, но возвращаемые params[:image_id] имеют подпись, добавленную после знака #, например:

"image_1_id"=>"image/upload/v1383951287/foobar.jpg#b023156dfebede65......."}

Таким образом, это в конечном итоге сохраняется в модели. Затем, когда я пытаюсь получить изображение, используя:

<%= cl_image_tag(@model.image_1_id) %>

как предлагается в документах, к URL-адресу добавлена ​​не только подпись, но и дублированная часть пути впереди, например:

http://res.cloudinary.com/.../image/upload/v1/image/upload/v1383951287/foobar.jpg%23b023156d...

Очевидно, что эта ссылка не работает, но если убрать дублирующийся путь и подпись в конце, она работает.

Я не использую CarrierWave отчасти потому, что в документах мало (нет?) инструкций о том, как и почему вы будете использовать его с загрузкой изображения не на стороне сервера. Также я использую form_for для изображения и других атрибутов, может ли это быть проблемой? Форма выглядит так:

<%= form_for @model do |f| %>
...
<%= f.cl_image_upload(:image_1_id) %>
...
<% end %>

Любая помощь очень ценится. Я довольно новичок в этом, поэтому, вероятно, что-то простое, что я пропустил. Но стоит сказать, что ошибок в консоли нет и файлы JS вроде грузятся корректно.


person user1563549    schedule 08.11.2013    source источник


Ответы (2)


Пример проекта фотоальбома в папке примеров cloudinary_gem показывает, как использовать Cloudinary с интеграцией CarrierWave как для прямой загрузки, так и для загрузки через сервер.

Возвращаемое значение, которое вы видите, структурировано должным образом. Так Cloudinary возвращает URI предварительно загруженного файла. Если вы не хотите использовать CarrierWave, вы все равно можете использовать PreloadedFile< /а>. Передача того, что вы получаете от Cloudinary, в конструктор PreloadedFile может служить двойной цели: вы можете проверить загрузку с помощью возвращенной подписи (см. valid?) и преобразовать это значение во что-то, что можно передать в cl_image_tag (см. identifier).

Вы можете либо сохранить полный возвращенный URI и перевести его при его использовании, либо сохранить переведенное значение в своей БД.

person Itai Benari    schedule 16.11.2013

Вот как вы должны сохранить свою модель. Чтобы правильно использовать cl_image_tag

if params[:image_id].present?
  preloaded = Cloudinary::PreloadedFile.new(params[:image_id])         
  raise "Invalid upload signature" if !preloaded.valid?
  @category.image_id = preloaded.identifier
end
person Yazan Khalaileh    schedule 22.05.2014