Я пытаюсь загрузить изображение в Cloudinary из моего веб-приложения Sinatra. I получил это сохранение изображения локально с помощью CarrierWave, и я знаю, что Cloudinary и CarrierWave играют красиво друг с другом, но я пробовал все и без кубиков.Не удается загрузить изображение в Cloudinary из Sinatra
Я следил за документами, но они очень ориентированы на Rails. Черт побери!
# Model - User.rb
class ImageUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
process convert: 'png'
version :face do
cloudinary_transformation gravity: :face
end
end
class User
include DataMapper::Resource
attr_accessor :image
property.............
mount_uploader :image, ImageUploader
end
# Config - app.rb
require 'carrierwave/datamapper'
require 'cloudinary'
# DataMapper code ...
# Some routes ...
post '/add' do
user = user.create(name: params[:name])
Cloudinary::Uploader.upload(params[:image], api_key: 'API_KEY', api_secret: 'API_SECRET', cloud_name: 'CLOUD_NAME')
# View (haml)
%head
%script{src: "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"}
%script{src: "js/cloudinary_js/jquery.ui.widget.js"}
%script{src: "js/cloudinary_js/jquery.iframe-transport.js"}
%script{src: "js/cloudinary_js/jquery.fileupload.js"}
%script{src: "js/cloudinary_js/jquery.cloudinary.js"}
# snip snip ...
%form{action: "/add", method: "POST", enctype: "multipart/form-data"}
%input{type: "file", name: "image"}
%button Submit
Ошибка я получаю при попытке отправить форму является:
TypeError at /add
no implicit conversion of Hash into String
линия это дает мне, что является причиной ошибки является Cloudinary загрузчиком строка в методе пост.
Вот мой Params [: изображение] хэш
{:filename=>"batman_robin.jpg", :type=>"image/jpeg", :name=>"image", :tempfile=>#<Tempfile:/var/folders/rv/2w8gpstn4hb2lb__27n27ksh0000gn/T/RackMultipart20131223-36484-tgmaba>, :head=>"Content-Disposition: form-data; name=\"image\"; filename=\"batman_robin.jpg\"\r\nContent-Type: image/jpeg\r\n"}
В Документах он упоминает подпись файла, то говорится, что CarrierWave обрабатывает это. Я думаю, что моя проблема связана с формой загрузки.
В каком месте я ошибаюсь? Кто-нибудь знает, что генерирует «cl_image_upload_tag», а какие «специальные атрибуты» CloudInfo, которые мне нужно добавить в тег загрузки файлов?
UPDATE: Так что я понял, что и я могу на самом деле просто передать изображение непосредственно следующим образом:
Cloudinary::Uploader.upload(params[:image][:filename] ...
Однако теперь говорит
No such file or directory - batman_robin.jpg
что странно. Я жестко закодировал URL-адрес, и он загружается в Cloudinary. Есть идеи? Также, любая идея о загрузке jQuery для Cloudinary?