2011-09-15 15 views
5

Paperclip'i kullanarak, bu gibi bir URL'den bir resim almak istiyorum:Ataç: Bir görüntüyü programatik olarak atayın ve adını girin

require 'open-uri' 

user.photo = open(url) 

Sorun şu ki 'open-uri20110915-4852-1o7k5uw' gibi bir dosya adıyla açılmam. User.photo dosyasındaki dosya ismini değiştirebileceğim bir yol var mı?

Ek olarak, Paperclip dosyalarımı S3'te saklıyor, bu yüzden ilk atamada istediğim dosya adını ayarlayabilirsem daha iyi olurdu, böylece görüntüler sağ S3 anahtarına yüklenir. Böyle bir şey:

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

cevap

6

URL'den (foo.jpg olsun) ve ardından yukarıdaki instance_write yöntemini kullanarak örneğe geri yazın.

+0

Ve bunu 'open (url) 'fotoğrafına atadıktan sonra yapıyorum? Bunu zaten S3'te olan mevcut bir kullanıcıyla denedim. Artık 'u.photo_file_name' yeni ismi döndürüyor, ancak 'u.photo (: orijinal)' hala eski S3 url'sine ve ayrıca 'u.photo.path''e sahip. Ve S3'teki dosya hareket etmedi. –

+1

Görüntü mevcutsa "photo.reprocess!" Diyebilirsiniz. Paperclip'in depolama arka ucunu (S3) güncellemesi. Aksi takdirde, yukarıdaki kayıtlar ilk kaydınızdan önce kaydedilir ve en sonunda kaydetme işlemi doğru bir şekilde S3'e kaydedilmelidir –

+0

Not Bazen ataç, karakterleri değiştirmek için dosya adını değiştirir. Bu nedenle, ayarladığınız dosya adı bu kurallarla eşleşmelidir, aksi halde ataşın kaybolması gerekir. . – James

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

Bu, dosya adının URL'deki dosya adına ayarlanmasını sağlar.

+0

Son zamanlarda bu problemi tekrar yaşadım ve bu sefer daha çok bu yaklaşımı benimsemeliydim. İşte hakkında bir blog yazısı: http://www.illuminatedcomputing.com/posts/2013/06/paperclip-with-server-side-files/ –

İlgili konular