2010-04-03 15 views
6

me gustaría crear un controlador Rails que descargue una serie de archivos jpg de la web y los escriba directamente en la base de datos como (no estoy tratando de hacer un formulario de carga)Rieles: Cómo descargar un archivo desde un http y guardarlo en la base de datos

¿Alguna pista sobre cómo hacer eso?

Gracias

Editar: Aquí hay un código ya he escrito usando el aditamento de Fu-joya:

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 
} 

y me sale un "método definido` content_type' para #" error

Respuesta

6

Use open-url (en Ruby stdlib) para tomar los archivos, luego use una gema como paperclip para almacenarlos en la base de datos como archivos adjuntos a sus modelos.

ACTUALIZACIÓN:

Attachment_fu no acepta los bytes sin formato, sino que precisa de un objeto "de tipo fichero". Use this example of a LocalFile junto con el código siguiente para volcar la imagen en un archivo temporal y luego envíela a su modelo.

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

Gracias, ya lo intenté con otra joya, pero no lo logré. Vea mi código de muestra arriba de – Chris

+0

'content_type' no está definido porque attachement_fu espera un archivo, no una secuencia de bytes. He actualizado mi respuesta con un código. –

+0

Gracias, funciona :) – Chris

Cuestiones relacionadas