2011-10-03 18 views
8

Al utilizar la gema Faraday para golpear una URL de una imagen como esta:El uso de Faraday Rubí joya para descargar la imagen y escribir en el disco

http_conn = Faraday.new do |builder| 
    builder.adapter Faraday.default_adapter 
end 
response = http_conn.get 'http://example.tld/image.png' 

¿Cómo se puede escribir el archivo de imagen a partir de la respuesta de Faraday en el disco?

La depuración del atributo response.body muestra que se trata de datos binarios.

Cualquier ayuda muy apreciada.

Respuesta

11

¿Por qué no simplemente escribir el response.body como cualquier otro archivo?

File.open('image.png', 'wb') { |fp| fp.write(response.body) } 
+4

¿Qué sucede aquí si el cuerpo de la respuesta es grande? Parece que todo el cuerpo se lee en la memoria antes de que se escriba en el archivo; sería bueno poder escribir en el archivo en fragmentos. –

+0

@JP. ¿No es Faraday quien está sorbiendo toda la imagen en la memoria? ¿O preguntas cómo conseguir que Faraday lo transmita? –

+1

Exactamente, sí, me pregunto si hay una forma de hacer que Faraday transmita el cuerpo. He estado buscando implementar una clase HTTP IO utilizando rangos de bytes HTTP para poder (por ejemplo) recuperar un pequeño archivo dentro de un gran archivo zip sin recuperar todo (el zip de ruby ​​puede hacer lo mismo con los objetos File IO al buscar y solo leyendo el directorio zip central y el contenido solicitado) –

Cuestiones relacionadas