0

ユーザーがpaperclipのおかげで写真をアップロードできる ruby​​ on rails で Web サイトを開発しています。写真はamazon S3に保存されています。その後、鳥小屋のおかげで写真を変更できます。しかし、新しい写真を保存したいとき、aviary は変更した写真を取得できる一時的な URL を教えてくれました。

ペーパークリップでできますか?URLから画像を保存してS3に保存できるとは思いませんか?

1 週間検索しましたが、最善の方法がわかりません。filepickerについて読んだことがありますが、S3 ファイルにデータを保存するためのアカウントは無料ではありません...

最後に、このs3 https://github.com/qoobaa/s3について聞いたことがありますが、使い方がわかりません。gem s3をインストールしましたが、設定require 's3'しても認識されません。

何をするのが最善ですか?

4

2 に答える 2

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')

お役に立てれば。

于 2014-07-23T18:23:36.060 に答える
0

この質問に回答して以来、ペーパークリップはかなり成熟しました。URL を渡してファイルを保存する場合は、Paperclip v3.1.4 の時点で、URL を Paperclip の添付ファイル属性に割り当てるだけで済みます。

Userクラスがあり、私の添付ファイルが と呼ばれているとしましょうavatarUserモデルには次のものがあります。

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'

この非表示フィールドの値は、AviaryonSaveコールバックで設定できます。

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()してフォームを送信したり、ユーザーが必要なときに送信したりできます。

于 2015-01-21T07:48:56.683 に答える