2013-12-10 3 views
0

Я занимаюсь разработкой веб-сайта на Ruby On Rails, где пользователи могут загружать фотографии благодаря скрепку, она хранится в Амазонки S3. После этого они могут модифицировать фотографии благодаря вольеру. Но когда я хочу сохранить новые фотографии, вольер просто дал мне временный URL, где я могу получить измененную картинку.Сохранение изображения в S3 из временного URL

Возможно ли скрепка? Я не думаю, что он может сохранить изображение с URL-адреса и сохранить его на S3?

Я искал неделю, и я не знаю, как это сделать. Я читал о filepicker, но счет для хранения данных в S3 файлы не бесплатно ...

Наконец я слышал об этом s3https://github.com/qoobaa/s3, но я не понимаю, как использовать Это. Я установил gem s3, но когда я установил require 's3', он не распознается.

Что лучше всего делать?

+0

Никто не имеет идеи? я пытаюсь с помощью paperclip, но я сталкиваюсь с множеством проблем, чтобы заставить его работать – 2ueenO

+0

, если это все еще актуально, посмотрите на мой ответ ниже - последняя версия Paperclip имеет эту функцию –

ответ

1

Почему бы вам не передать URL-адрес, который Aviary генерирует на ваш сервер и загружать с него новую фотографию? Код ниже делает это в Python/Django:

@login_required  
@csrf_exempt 
def upload_from_url(request): 
    origin_url = request.POST.get("origin_url") 
    name = request.POST.get("name") 

    try: 
     conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY) 
     bucket_name = settings.AWS_UGC_STORAGE_BUCKET_NAME 
     bucket = conn.get_bucket(bucket_name) 
     k = Key(bucket) 

     k.key = name 
     file_object = urllib2.urlopen(origin_url) 
     fp = StringIO.StringIO(file_object.read()) 
     k.set_contents_from_file(fp) 

     return HttpResponse("Success") 
    except Exception, e: 
     return HttpResponse(e, mimetype='application/javascript') 

Надеюсь, что это поможет.

0

Paperclip созрел много, так как на этот вопрос был дан ответ. Если вы хотите сохранить файлы, отправив URL-адрес, как с Paperclip v3.1.4, вы можете просто назначить URL-адрес вашему приложению вложений в папке.

Предположим, у меня есть класс User, и мое приложение называется avatar. Мы будем иметь следующее в нашей User модели:

has_attached_file :avatar 

# Validate the attached image is image/jpg, image/png, etc 
# This is required by later releases of Paperclip 
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ 

По нашему мнению, мы можем определить скрытое поле, которое будет принимать временный URL, полученный от Aviary:

= f.hidden_field :avatar, id: 'avatar' 

Мы можем установить значение этого скрытого поля с вольер onSave обратного вызова:

var featherEditor = new Aviary.Feather({ 
    apiKey: '#{ENV['AVIARY_KEY']}', 
    onSave: function(imageID, newURL) { 
    var img = document.getElementById(imageID); 
    img.src = newURL; 

    var avatar = document.getElementById('avatar'); 
    avatar.value = newURL; 
    featherEditor.close(); 
    } 
}); 

в пределах OnSave, вы можете использовать AJAX для обновления User объекта, использование jQuery's .submit(), чтобы отправить форму, или позволить пользователю отправить ее, когда захотят.

Смежные вопросы