Сохранение изображения профиля, полученного из Facebook при использовании драгоценного камня Paperclip - PullRequest
2 голосов
/ 19 мая 2011

Я пытаюсь выяснить, как разрешить пользователю загружать фотографии со своего компьютера или загружать их из Facebook.

У меня уже есть форма для загрузки изображения и его сохранения с помощью плагина Paperclip.Это отлично работает.

Я также уже настроил аутентификацию Facebook и использую гем Koala для доступа к API графа Facebook.

Я уже написал этот метод:

def fetch_fb_picture
 unless current_user.authentications.blank?  
  @graph = Koala::Facebook::GraphAPI.new(current_user.authentications.find_by_provider("facebook").token)
  @picture = @graph.get_picture("#{current_user.authentications.find_by_provider('facebook').username}")
  current_user.profile.photo = @picture
 end
end

Я считаю, что камень Коала возвращает URL-адрес изображения.Однако, поскольку я использую драгоценный камень paperclip, мой профиль принимает следующие атрибуты:

t.string   "photo_file_name"
t.string   "photo_content_type"
t.integer  "photo_file_size"

Как, следовательно, правильно сохранить изображение facebook в базе данных?

Ответы [ 2 ]

6 голосов
/ 19 мая 2011

Вы можете сделать что-то вроде:

r = open("http://graph.facebook.com/#{@user.facebook_id}/picture")
image_data = r.read
file_size = r.length
mime_type = "image/jpeg" #fb photos always are jpg
#write data to database, or save as temp file and upload to S3

Я бы не советовал делать это таким образом, поскольку график Faceboook всегда будет возвращать вам изображение пользователя, так как они всегда общедоступны. Вам просто нужно позвонить / фото после их ID или имени пользователя. Вы могли бы иметь логическое значение, чтобы увидеть, если это пользователь Facebook, и просто использовать идентификатор для отображения изображения. Это также обеспечит наличие самой последней фотографии на Facebook.

if @user.facebook_image?
   image_tag "http://graph.facebook.com/#{@user.facebook_id}/picture"
else
   image_tag @user.photo.url(:thumb)
end
2 голосов
/ 21 августа 2013

Я искал получение профиля профиля FB и сохранение его с рельсами в s3, я нашел способ, основанный на предыдущем ответе (используя rmagick):

r = open("http://graph.facebook.com/"+params[:FacebookId]+"/picture?width=142&height=142")
bytes = r.read
img = Magick::Image.from_blob(bytes).first
fmt = img.format
data=StringIO.new(bytes)
data.class.class_eval { attr_accessor :original_filename, :content_type }
data.original_filename = Time.now.to_i.to_s+"."+fmt
data.content_type='image.jpeg'
user.profilepic = data
user.save
...