2010-04-03 18 views
6

web üzerinden jpg dosyaları bir seri indirmek ve doğrudan veritabanına yazmak için bir Rails denetleyici oluşturmak istiyorum ikili (Ben değilim Bir yükleme formu yapmaya çalışıyorum)Raylar: Nasıl bir http bir dosya indirmek ve veritabanına kaydetmek için

Bunu yapmanın yolunda bir ipucu var mı?

teşekkür ederiz

Düzenleme

: İşte Zaten eki-Fu mücevher kullanarak yazdığı bazı kodudur:

http = Net::HTTP.new('awebsite', 443) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
http.start() { |http| 
    req = Net::HTTP::Get.new("image.jpg") 
    req.basic_auth login, password 
    response = http.request(req) 
    attachment = Attachment.new(:uploaded_data => response.body) 
    attachement.save 
} 

Ve hata bir "# için tanımsız yöntem` CONTENT_TYPE içerik'" olsun

cevap

6

Dosyaları kapmak için open-url'u (Ruby stdlib'de) kullanın, daha sonra db'de modelinize ek olarak saklamak için paperclip gibi bir mücevher kullanın.

GÜNCELLEME:

attachment_fu ham bayt kabul etmez, bu bir "dosya benzeri" nesne gerekiyor. Görüntüyü geçici bir dosyaya dökmek için aşağıdaki kodla birlikte this example of a LocalFile kullanın ve ardından modelinize gönderin.

http = Net::HTTP.new('www.google.com') 
    http.start() { |http| 
    req = Net::HTTP::Get.new("/intl/en_ALL/images/srpr/logo1w.png") 
    response = http.request(req) 
    tempfile = Tempfile.new('logo1w.png') 
    File.open(tempfile.path,'w') do |f| 
     f.write response.body 
    end 
    attachment = Attachment.new(:uploaded_data => LocalFile.new(tempfile.path)) 
    attachement.save 
    } 
+0

Teşekkür ederim, bunu başka bir mücevherle denedim, ancak başarılı olmadı. – Chris

+0

üzerindeki örnek koduma bakın, content_type' undefined, attachement_fu bir dosya beklediğinden, bayt akışı değil. Cevabımı bazı kodlarla güncelledim. –

+0

Teşekkür ederim, işe yarıyor :) – Chris

İlgili konular