Как обновить аватар / фото модели напрямую? - PullRequest
1 голос
/ 07 июня 2011

Это рельсы 3.0.x. Мне было просто интересно, как обновить атрибут фотографии / аватара модели напрямую, не предлагая пользователю загрузить данные из своей системы?

Я использую Скрепка , чтобы прикрепить фотографию к модели; Он имеет расширение, так что пользователь может использовать URL для загрузки фотографии. Это работает.

Теперь я смотрел на Canvas2Image , и он возвращает изображение холста, чтобы пользователь мог загрузить их.

Мне было интересно, как использовать URL, который возвращает Canvas2Image, чтобы я мог напрямую обновить фотографию текущей модели?

Пока у меня есть эта форма, которая предлагает пользователю обновить аватар / модель текущей модели:

<% form_for(@prototype,
            :url=>{:controller=>"prototypes",
            :action=>"update"}, 
            :html => { :multipart => true }) do |f| %>

    <%= f.file_field :avatar %><br><br>
    <%= f.text_field :image_url %><br><br>
    <%= submit_tag   "Save Prototype" %>

<% end %>

Любая помощь приветствуется, спасибо!

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Из приведенной выше ссылки на Canvas2Image мне кажется, что вы пытаетесь обрабатывать изображения в кодировке Base64 (например, data:image/octet-stream;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wB).

Скрепка ожидает объект Tempfile, который создается за сценойдля вас, когда вы загружаете изображение.Возможно подделать Tempfile, используя объект StringIO и добавив методы экземпляра content_type и original_filename.

Я опубликовал суть кода, который использовал для этого, в одном из моихпроекты.https://gist.github.com/1012107.

Чтобы сделать что-то подобное, вам необходимо удалить начальную часть URI Canvas2Image data:image/octet-stream;base64, и использовать оставшийся код Base64 в качестве image_data.Вам нужен способ предоставления или работы с типом содержимого и именем файла.

Если вы просто хотите использовать обычные URL-адреса, такие как http://example.com/image.jpg, у вас есть несколько доступных вариантов.

Выможно просто сохранить URL-адрес и использовать его в качестве источника изображения на ваших страницах.Я знаю, что это не всегда вариант, и вы не можете контролировать доступность образа.

В противном случае есть несколько утилит, таких как net / http и curl, которые вы можете использовать для загрузки образа.Если вы думаете, что хотите пойти по этому пути, то вы можете также рассмотреть возможность загрузки изображений с использованием отложенных заданий или аналогичного фонового процесса.Таким образом, ваш интерфейс не зависает, если загрузка изображения происходит медленно.

1 голос
/ 07 июня 2011

Эта ссылка может быть тем, что вы ищете

Однако, если вы еще не проделали большую работу со скрепкой, я бы порекомендовал вам перейти на CarrierWave. То же самое делается с двумя строками кода:

@prototype.image_remote_url = canvas2image_url #you should change this
@prototype.save
1 голос
/ 07 июня 2011

Если вы хотите получить граватар, используя адрес электронной почты пользователя, вы можете использовать следующий фрагмент кода.

В помощнике:

def avatar_url(user)    
 gravatar_id = Digest::MD5.hexdigest(user.email.downcase)
 return "http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"         
end

На ваш взгляд:

<%= link_to(image_tag(avatar_url(user)), user_path(user))%>

Вот и все! Вам не нужно просить пользователя загрузить свою фотографию в вашу систему. Покажет фото его граватар аккаунта. Пожалуйста, дайте мне знать, решит ли это вашу проблему.

...