2008-11-04 19 views

Respuesta

191

open-uri es parte de la biblioteca estándar de Ruby, y redefinirá el comportamiento de open para que pueda abrir una url, así como un archivo local. Devuelve un objeto File, por lo que debería poder llamar a métodos como read y readlines.

require 'open-uri' 
file_contents = open('local-file.txt') { |f| f.read } 
web_contents = open('http://www.stackoverflow.com') {|f| f.read } 
+3

@este acaba de hacer mi día. ¡Gracias! – AnApprentice

+2

¿Hay alguna forma de devolver un objeto de archivo como lo hizo aquí desde un adjunto de ActionMailer? – AnApprentice

+0

Eso es excelente, gracias. –

0

para la URL, es posible que desee rest-client, de su documento

Si desea transmitir los datos de la respuesta a un archivo, ya que viene, en lugar de en su totalidad en la memoria, también puede pase RestClient :: Request.exe, ejecute un parámetro: block_response al que pase un bloque/proc. Este bloque recibe el objeto sin procesar Net :: HTTPResponse desde Net :: HTTP, que puede usar para transmitir directamente a un archivo a medida que cada fragmento Esta recibido.

File.open('/some/output/file', 'w') {|f| 
    block = proc { |response| 
    response.read_body do |chunk| 
     f.write chunk 
    end 
    } 
    RestClient::Request.execute(method: :get, 
           url: 'http://example.com/some/really/big/file.img', 
           block_response: block) 
} 
Cuestiones relacionadas