2017-09-07 2 views
0

Comment puis-je télécharger un fichier à partir d'un lien, mais aussi faire progresser le téléchargement afin de l'afficher? Du très petit je connais open-uri et le typhoeus gem (j'utilise les deux) gèrent le téléchargement interne et je n'ai aucune idée sur la façon d'obtenir la progression du téléchargement à partir d'eux.Ruby obtenir la progression du téléchargement

Je suppose que ce que je cherche est une façon de mettre en pause le téléchargement et d'obtenir la progression de la mise à jour d'une valeur chaque fois qu'un paquet est reçu mais je ne sais pas comment procéder.

Je pourrais aussi utiliser une autre gemme? Si oui, lequel et pourquoi?

Répondre

1

Vous devez le faire en tant que requête fragmentée, ce que font les bibliothèques comme open-uri dans les coulisses si vous utilisez leurs API de haut niveau (comme open(uri).read).

exemple non testé d'après https://www.ruby-forum.com/topic/170237:

u = URI.parse(uri) 
s = "" 
progress = 0 

Net::HTTP.start(u.host, u.port) do |http| 
    http.request_get(u.path) do |response| 
    response.read_body do |chunk| 
     s << chunk 
     progress += chunk.length 
     puts "Downloaded #{progress} so far" 
    end 
    end 
end 
puts "Received:\n#{s}"