ruby - sacar - ¿Cómo descargar un archivo de imagen a través de HTTP en un archivo temporal?
extraer imagenes de pdf online (3)
He encontrado buenos ejemplos de NET :: HTTP para descargar un archivo de imagen, y he encontrado buenos ejemplos de cómo crear un archivo temporal. Pero no veo cómo puedo usar estas bibliotecas juntas. Es decir, ¿cómo se trabajaría la creación del archivo temporal en este código para descargar un archivo binario?
require ''net/http''
Net::HTTP.start("somedomain.net/") do |http|
resp = http.get("/flv/sample/sample.flv")
open("sample.flv", "wb") do |file|
file.write(resp.body)
end
end
puts "Done."
Hay bibliotecas más api-friendly que Net::HTTP
, por ejemplo httparty :
require "httparty"
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/DahliaDahlstarSunsetPink.jpg/250px-DahliaDahlstarSunsetPink.jpg"
File.open("/tmp/my_file.jpg", "wb") do |f|
f.write HTTParty.get(url).body
end
Me gusta usar RestClient:
file = File.open("/tmp/image.jpg", ''wb'' ) do |output|
output.write RestClient.get("http://image_url/file.jpg")
end
require ''net/http''
require ''tempfile''
require ''uri''
def save_to_tempfile(url)
uri = URI.parse(url)
Net::HTTP.start(uri.host, uri.port) do |http|
resp = http.get(uri.path)
file = Tempfile.new(''foo'', Dir.tmpdir, ''wb+'')
file.binmode
file.write(resp.body)
file.flush
file
end
end
tf = save_to_tempfile(''http://a.fsdn.com/sd/topics/transportation_64.png'')
tf # => #<File:/var/folders/sj/2d7czhyn0ql5n3_2tqryq3f00000gn/T/foo20130827-58194-7a9j19>