1

これは、レール3.0.xです。モデルの写真/アバターの属性を自分のシステムからアップロードするようにユーザーに促さずに直接更新する方法を知りましたか?モデルのアバター/写真を直接更新するには?

私はPaperclipを使って写真をモデルに添付しています。ユーザーがURLを使用して写真をアップロードできるように拡張されています。これは機能します。

今、私はCanvas2Imageを見ていて、ユーザーがキャンバスをダウンロードできるようにキャンバスのイメージを返します。

Canvas2Imageから返されるURLをどのように使用して現在のモデルの写真を直接更新できるのでしょうか?今の

、私は現在のモデルのアバター/写真の更新を促すこのフォームを持っている:

<% form_for(@prototype, 
      :url=>{:controller=>"prototypes", 
      :action=>"update"}, 
      :html => { :multipart => true }) do |f| %> 

    <%= f.file_field :avatar %><br><br> 
    <%= f.text_field :image_url %><br><br> 
    <%= submit_tag "Save Prototype" %> 

<% end %> 

すべてのヘルプは高く評価され、感謝を!

答えて

1

上記のCanvas2Imageへのリンクから、Base64でエンコードされた画像(data:image/octet-stream;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBなど)を処理しようとしているようです。

Paperclipは画像をアップロードするときに舞台裏で作成されるTempfileオブジェクトを想定しています。 StringIOオブジェクトを使用し、content_typeoriginal_filenameインスタンスメソッドを追加することによってTempfileを偽装することは可能です。

私のプロジェクトの1つでこれを達成するために使用したコードで要点を投稿しました。 https://gist.github.com/1012107

同様のことをするには、Canvas2Image URIの先頭部分を削除してdata:image/octet-stream;base64,を残し、残りのBase64コードをimage_dataとして使用する必要があります。あなたは、コンテンツタイプとファイル名を提供するか、または回避する方法が必要です。

http://example.com/image.jpgのような通常のURLを使用する場合は、いくつかのオプションがあります。

URLを保存して、ページ上の画像ソースとして使用するだけです。私はこれがいつもオプションではないことを知っています、あなたはイメージの可用性を制御できません。

それ以外の場合は、画像をダウンロードするために使用できるnet/httpやcurlなどのユーティリティがいくつかあります。あなたがこのルートに行きたいと思ったら、あなたは遅れた仕事や同様のバックグラウンドプロセスを使ってイメージをダウンロードすることを検討するかもしれません。イメージのダウンロードが遅い場合、UIがハングしないようにします。

+0

これは私の質問に関連しています。私はあなたがコンテンツタイプとファイル名で何を意味するのだろうと思っていたのですか? PNG、JPGなどのコンテンツタイプですか?ファイル名は、画像データの代わりに名前としてコードを提供しますか?乾杯。 – bunnybare

+0

はい、PNG、JPGなどのコンテンツタイプです。 –

+0

あなたのケースでファイル名を自動生成するのは良い考えです。 –

1

ユーザーのメールアドレスを使用してグラバターを取得する場合は、次のコードスニペットを使用できます。ヘルパーで

:あなたのビューで

def avatar_url(user)  
gravatar_id = Digest::MD5.hexdigest(user.email.downcase) 
return "http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"   
end 

<%= link_to(image_tag(avatar_url(user)), user_path(user))%> 

それです!あなたのシステムにあなたの写真をアップロードするようにユーザーに頼む必要はありません。彼のグラバターアカウントの写真が表示されます。それがあなたの問題を解決するかどうか私に教えてください。

+0

こんにちはFuad!これは私のユーザーのプロフィールにとってすばらしいことです。今は、それは私が探しているものではありません。私のユーザーは、プロトタイプのalot(has_many関係)を持っており、これらのプロトタイプには画像が添付されています。ちょうど私がどのようにキャンバスを通してこれらのイメージを編集して、それをサーバーに直接保存させることができるのだろうかと思っています(私の究極の目標) – bunnybare

1

This linkはあなたがまだクリップで多くの作業を行っていない場合は、私がCarrierWaveに交換することをお勧めだろう

探しているものかもしれません。 同じことが2行のコードで行われます。

@prototype.image_remote_url = canvas2image_url #you should change this 
@prototype.save 
+0

こんにちはbassneck!回答ありがとうございます。私はすでにPaperclipでこの機能を実装しました(「ユーザーがURLを使用して写真をアップロードできる」と述べました)。それでも、ユーザーに画像のURLを提供するように要求します。私はCanvas2Imageが提供する画像を使ってそれを行う方法を尋ねていました(私のデモのリンクを見てください)。ユーザーがキャンバスに描画する場合は、キャンバスをイメージに変換し、ボタンを押してプロトタイプの現在のイメージを上書きします。 – bunnybare

関連する問題