2010-04-03 3 views
6

Ich möchte einen Rails Controller erstellen, der eine Serie von JPG-Dateien aus dem Internet herunterladen und direkt in die Datenbank schreiben als binäre (ich bin nicht versuchen, ein Upload-Formular zu machen)Rails: Wie man eine Datei von einem http herunterladen und in der Datenbank speichern

Irgendwelche Hinweise auf den Weg, das zu tun?

Danke

Edit: Hier einige Code, den ich bereits attachment-fu gem schrieb mit:

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 
} 

Und ich erhalte eine "nicht definierte Methode` content_type‘für #" Fehler

Antwort

6

Verwenden Sie open-url (in der Ruby StdLib), um die Dateien zu greifen, und verwenden Sie dann ein Schmuckstück wie paperclip, um sie in der db als Anlagen zu Ihren Modellen zu speichern.

UPDATE:

Attachment_fu nicht das rohe Bytes nicht akzeptiert, braucht es ein "Datei-like" Objekt. Verwenden Sie this example of a LocalFile zusammen mit dem folgenden Code, um das Bild in eine temporäre Datei zu speichern und dann an Ihr Modell zu senden.

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

Danke, das habe ich schon mal mit einem anderen Juwel ausprobiert, ist aber nicht gelungen. Siehe meinen Beispielcode über – Chris

+0

'content_type' ist undefiniert, da attachement_fu eine Datei erwartet, keinen Bytestrom. Ich habe meine Antwort mit einem Code aktualisiert. –

+0

Danke, es funktioniert :) – Chris

Verwandte Themen