2010-04-03 12 views
6

Vorrei creare un controller Rails che scarica una serie di file jpg dal web e scriverli direttamente nel database come binario (non lo sono cercando di fare un modulo di caricamento)Rails: Come scaricare un file da un http e salvarlo nel database

Qualche indizio sulla strada per farlo?

Grazie

Edit: Ecco alcuni codice che ho già scritto usando l'attaccamento-fu gemma:

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 
} 

e ottengo un "metodo non definito` content_type' per #" Errore

risposta

6

Usa open-url (in Ruby stdlib) per prendere i file, quindi usa una gemma come paperclip per archiviarli nel db come allegati ai tuoi modelli.

UPDATE:

Attachment_fu non accetta i byte prime, ha bisogno di un oggetto "simile a file". Utilizzare this example of a LocalFile insieme al codice seguente per scaricare l'immagine in un file temporaneo e inviarla al modello.

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

Grazie, l'ho già provato con un altro gioiello, ma non ci sono riuscito. Vedere il mio codice di esempio sopra – Chris

+0

'content_type' non è definito perché attachement_fu si aspetta un file, non un flusso di byte. Ho aggiornato la mia risposta con un po 'di codice. –

+0

Grazie, funziona :) – Chris

Problemi correlati