2011-10-03 7 views
8

Quando si utilizza il Faraday gemma di colpire un URL di un'immagine come questa:Utilizzando Faraday rubino gemma per scaricare l'immagine e scrivere su disco

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

Come si può scrivere il file di immagine dalla risposta Faraday su disco?

Il debug dell'attributo response.body indica che si tratta di dati binari.

Qualsiasi aiuto molto apprezzato.

risposta

11

Perché non scrivere semplicemente lo response.body come qualsiasi altro file?

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

Cosa succede qui se il corpo della risposta è grande? Sembra che tutto il corpo sia letto in memoria prima di essere scritto nel file: sarebbe bello poter scrivere sul file in blocchi. –

+0

@ JP. Non è forse Faraday che sta leccando l'intera immagine nella memoria? O stai chiedendo come fare a Faraday per trasmetterlo in streaming? –

+1

Esattamente, sì, mi sto chiedendo se c'è un modo per far sì che Faraday diffonda il corpo. Stavo cercando di implementare una classe IO HTTP utilizzando gli intervalli di byte HTTP in modo da poter (ad esempio) recuperare un piccolo file dall'archivio zip di grandi dimensioni senza recuperare l'intero oggetto (Ruby Zip può fare lo stesso con gli oggetti File IO ricercando e solo leggendo la directory centrale zip e il contenuto richiesto) –

Problemi correlati