2011-09-15 24 views
5

Paperclipを使って、次のようなURLから画像を取得したいと思います。ペーパークリップ:画像をプログラムで割り当て、その名前を設定する

require 'open-uri' 

user.photo = open(url) 

問題は、open-uri20110915-4852-1o7k5uwのようなファイル名で巻いてしまうことです。 user.photoのファイル名を変更する方法はありますか?

追加されたひねりとして、Paperclipは私のファイルをS3に保存しているので、最初の割り当てで必要なファイル名を設定できれば、画像は正しいS3キーにアップロードされます。このようなもの:

user.photo = open(url), :filename => URI.parse(url).path 

答えて

6

あなたが経由して戻ってあなたのインスタンスにファイル名を書き込むことができます。

http://example.com/foo.jpg 

あなたが最初の名前を解析することができます:ソースURLが似ているのであれば

photo.instance_write(:file_name, new_file_name) 

URLから(foo.jpgを取得)、上記のinstance_writeメソッドを使用してインスタンスに戻します。

+0

そして私は 'open(url)'を写真に割り当てた後にこれを行いますか?私はすでに写真がS3にある既存のユーザーと一緒にこれを試しました。今度は 'u.photo_file_name'は新しい名前を返しますが、' u.photo(:original) 'はまだ古いS3のURLと' u.photo.path'を持っています。 S3のファイルは動かなかった。 –

+1

イメージが存在する場合は、「photo.reprocess!」とコールする必要があります。 Paperclipにストレージのバックエンドを更新させる(S3)。それ以外の場合は、最初の保存に先立って上記の作業が行われ、最終的に保存が行われるときにS3に正しく保存する必要があります –

+0

paperclipによってファイル名が変更されることがあるので注意してください。 。 – James

5
io = open(url) 
def io.original_filename; base_uri.path.split('/').last; end 

これは、ファイル名をURLのファイル名に設定します。

+0

私はこの問題を最近もう一度打ち、今回はこのアプローチのようなものを採用しなければなりませんでした。ここにそれに関するブログ記事があります:http://www.illuminatedcomputing.com/posts/2013/06/paperclip-with-server-side-files/ –

関連する問題