簡體   English   中英

從臨時URL在S3中保存圖片

[英]Save a picture in S3 from a temporary URL

我正在開發一個基於ruby的網站,由於回形針 ,用戶可以在其中上傳圖片,該圖片存儲在Amazon S3中 之后,他們可以借助鳥舍來修改圖片。 但是,當我要保存新圖片時,鳥籠只給了我一個臨時URL,可以在其中獲取修改過的圖片。

回形針可以做到嗎? 我認為它不能從URL保存圖片並將其存儲到S3嗎?

我已經搜索了一個星期,但我不知道這樣做的最佳方法。 我已經讀過關於filepicker的文章 ,但是用於將數據存儲在S3文件中的帳戶不是免費的...

終於我聽說了這個s3 https://github.com/qoobaa/s3 ,但是我不知道如何使用它。 我已經安裝了gem s3,但是當我設置require 's3' ,它無法識別。

最好的辦法是什么?

您為什么不將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')

希望這可以幫助。

自從回答了這個問題以來,回形針已經成熟了很多。 從Paperclip v3.1.4開始,如果要通過傳遞URL保存文件,則只需將URL分配給Paperclip附件屬性即可。

假設我有一個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/

在我們看來,我們可以定義一個隱藏字段,該字段將接受從Aviary收到的臨時URL:

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

我們可以使用Aviary 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的.submit()提交表單,或者讓用戶在需要時提交表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM