Ho un URL per un'immagine che voglio salvare localmente, così posso usare Paperclip per produrre una miniatura per la mia applicazione. Qual è il modo migliore per scaricare e salvare l'immagine? (Ho esaminato la gestione dei file di rubini ma non ho trovato nulla.)Come posso scaricare un file da un URL e salvarlo in Rails?
risposta
Prova questa:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
Verificare Net::HTTP nella libreria standard. La documentazione fornisce diversi esempi su come scaricare documenti usando HTTP.
Se stai usando graffetta, scaricando da un URL viene ora gestita automaticamente.
Supponendo che hai qualcosa di simile:
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
del modello, basta specificare l'immagine come un URL, qualcosa di simile (scritto in longhand deliberata):
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
You' Probabilmente vorrà metterlo in un metodo nel tuo modello. Funzionerà anche bene sul filesystem temporaneo di Heroku.
Paperclip lo prenderà da lì.
fonte: paperclip documentation
Per i futuri utenti, Paperclip non lo consente più per impostazione predefinita: https://medium.com/in-the-weeds/all-about-paperclips -cve-2017-0889-server-side-request-forgery-ssrf-vulnerability-8cb2b1c96fe8 –
Una versione ancora più breve:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
Per mantenere lo stesso nome:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
E più efficiente in quanto l'output non è memorizzato come una stringa in memoria. +1 –
Anche se è utile avere entrambe le risposte visualizzate, così le persone come me possono vederle entrambe, pensare alle differenze e quindi scegliere consapevolmente questa risposta per le giuste ragioni :) –
Credo che questo sia il modo più chiaro:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
- 1. Rails: Come scaricare un file da un http e salvarlo nel database
- 2. Scaricare un file PDF e salvarlo in sdcard e poi leggere da lì
- 3. Come posso scaricare un file da EC2
- 4. Rails: come scaricare un documento precedentemente caricato?
- 5. Come posso scaricare un file usando window.fetch?
- 6. Come posso richiedere un file ma non salvarlo con Wget?
- 7. Come scaricare e salvare un file da internet usando Scala?
- 8. Come posso scaricare un file zip in python usando urllib2?
- 9. Utilizzo di Java per scaricare file da un URL HTTPS
- 10. Come posso estrarre un file da una risorsa incorporata e salvarlo sul disco?
- 11. Come leggere l'input da un modulo HTML e salvarlo in un file - Golang
- 12. Come scaricare un file da un sito Web in C#
- 13. Come posso scaricare un file XML usando C#?
- 14. Android: come scaricare il file dal server e salvarlo nella cartella specifica nella sdcard
- 15. Come posso sovrapporre un file audio a un altro e salvarlo?
- 16. come scaricare un file in java?
- 17. Come scaricare un file zip da un sito (python)
- 18. Come scaricare un file dal browser da Azure Blob Storage
- 19. come leggere un file CSV da un URL?
- 20. Come posso scaricare un file video su una scheda SD?
- 21. Come scaricare un file in un percorso specifico da un determinato URL in un modulo di Windows?
- 22. Scaricare un file senza estensione da un server
- 23. Come posso Creare, scrivere e quindi restituire un file in C# senza salvarlo sul disco
- 24. Come posso scaricare un file usando urllib.request in Python 3?
- 25. Elixir - Scarica un file (immagine) da un URL
- 26. Come scaricare un file temporaneo
- 27. Ci sono funzionalità nella libreria standard di Rust per scaricare un file da un URL
- 28. Come utilizzare HttpWebRequest/Response per scaricare un file binario (.exe) da un server Web?
- 29. Come scaricare un file con AFNetworking 2.0
- 30. scaricare un file da FTP utilizzando curl e php
Questo funziona. Grazie. Ho provato questo su un'immagine. L'immagine non è stata scritta correttamente nel file. Come se fosse stato corrotto o qualcosa del genere. Potresti anche guidarmi a fare lo stesso in un'applicazione Rails. Posso usare questo in un'applicazione Rails? –
Sì, è possibile utilizzarlo in un'applicazione rotaia. Il file non viene scritto correttamente è probabilmente perché ho dimenticato di aprire la destinazione in modalità write-binary. Lo modificherò ora. – Levi
dovrebbe anche essere 'file << open ('http://example.com/image.png') .read' – mraaroncruz