Скрепка: назначьте изображение программно и установите его имя - PullRequest
5 голосов
/ 15 сентября 2011

Используя Paperclip, я хочу получить изображение с URL-адреса следующим образом:

require 'open-uri'

user.photo = open(url)

Проблема в том, что я затем получаю имя файла, например «open-uri20110915-4852-1o7k5uw». Есть ли способ, которым я могу изменить имя файла на user.photo?

В качестве дополнительного поворота Paperclip хранит мои файлы на S3, поэтому было бы еще лучше, если бы я мог установить желаемое имя файла в первоначальном назначении, чтобы изображения загружались на правильный ключ S3. Как то так:

user.photo = open(url), :filename => URI.parse(url).path

Ответы [ 2 ]

6 голосов
/ 15 сентября 2011

Вы можете записать имя файла обратно в ваш экземпляр с помощью:

 photo.instance_write(:file_name, new_file_name)

Так что, если ваш исходный URL-адрес такой:

 http://example.com/foo.jpg

Вы можете сначала проанализировать имя из URL (чтобы получить foo.jpg), а затем записать его обратно в экземпляр, используя вышеуказанный метод instance_write.

5 голосов
/ 14 марта 2012
io = open(url)
def io.original_filename; base_uri.path.split('/').last; end

Это установит имя файла в имя файла в URL.

...