2013-12-10 3 views
0

클립 덕분에 사진을 업로드 할 수있는 루비 레일 웹 사이트를 개발 중이며 아마존 S3에 저장됩니다. 이후 그들은 조류 사진 덕분에 사진을 수정할 수 있습니다. 그러나 새로운 사진을 저장하고 싶을 때 조류 사육장에서 수정 된 사진을 얻을 수있는 임시 URL을 알려주었습니다.임시 URL에서 S3에 그림 저장

클립 클립으로 처리 할 수 ​​있습니까? URL에서 사진을 저장하고 S3에 저장할 수 있다고 생각하지 않습니까?

나는 1 주일 간 검색 한 결과 최선의 방법을 모른다. 나는 약 filepicker 읽었습니다,하지만 S3 파일에 데이터를 저장하는 계정은 무료로하지 않습니다 ...

마지막으로 내가이 S3 https://github.com/qoobaa/s3에 대해 들었지만, 내가 사용하는 방법을 이해하지 않습니다 그것. 보석 s3을 설치했지만, require 's3'으로 설정하면 인식되지 않습니다.

가장 적합한 방법은 무엇입니까?

+0

아무도 아이디어가 없습니까? 나는 클립으로 노력하고 있지만 작동하는데 많은 문제가 발생한다. – 2ueenO

+0

아직 관련이있다면, 아래 나의 대답을 보라 - 최신 Paperclip 버전은이 기능을 가지고있다. –

답변

1

왜 Aviary가 서버에 생성 한 URL을 전달하고 거기에서 새 사진을 업로드하지 않습니까? 아래의 코드는 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 v3.1.4에서 URL을 전달하여 파일을 저장하려면 Paperclip 첨부 속성에 URL을 할당하면됩니다.

클래스가 User이고 첨부 파일이 avatar이라고 가정 해 봅시다.

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

우리는 값을 설정할 수 있습니다

우리의 관점에서
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을 수락 숨겨진 필드를 정의 할 수 있습니다 : 우리는 우리의 User 모델에 다음을해야합니다 새장 onSave 콜백이 숨겨진 필드의 : 된 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(); 
    } 
}); 

, 당신은 User 객체 사용을 업데이트 AJAX를 사용할 수 있습니다 jQuery의 .submit() 양식을 제출하거나 사용자가 원할 때 제출하도록하십시오.