Ich habe eine URL zu einem Bild, das ich lokal speichern möchte, damit ich mit Paperclip ein Thumbnail für meine Anwendung erstellen kann. Was ist der beste Weg, um das Bild herunterzuladen und zu speichern? (Ich habe in die Ruby-Datei-Handhabung geschaut, bin aber auf nichts gestoßen.)Wie kann ich eine Datei von einer URL herunterladen und in Rails speichern?
Antwort
Versuchen Sie folgendes:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
Auschecken Net::HTTP in der Standardbibliothek. Die Dokumentation enthält mehrere Beispiele zum Herunterladen von Dokumenten über HTTP.
Wenn Sie Paperclip verwenden, von einer URL nun heruntergeladen automatisch gehandhabt wird.
Angenommen, Sie haben so etwas wie bekommen:
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
Auf Ihrem Modell, geben Sie einfach das Bild als eine URL, so etwas wie diese (geschrieben in vorsätzlicher Langschrift):
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
Sie‘ Ich möchte das wahrscheinlich in eine Methode in Ihrem Modell einfügen. Dies funktioniert auch gut auf Herokus temporärem Dateisystem.
Büroklammer wird es von dort nehmen.
Quelle: paperclip documentation
Für zukünftige Sucher, Paperclip nicht mehr erlaubt dies standardmäßig: https://medium.com/in-the-weeds/all-about-paperclips -cve-2017-0889-server-side-request-forgery-ssrf-vulnerability-8cb2b1c96fe8 –
Eine noch kürzere Version:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
die gleichen Dateinamen zu bleiben:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
Und effizienter, da die Ausgabe nicht als Zeichenfolge im Speicher gespeichert wird. +1 –
Obwohl es wirklich nützlich ist, beide Antworten angezeigt zu bekommen, so können Leute wie ich beide sehen, über die Unterschiede nachdenken und dann diese Antwort aus den richtigen Gründen bewusst wählen :) –
Ich denke, dies der klarste Weg ist:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
- 1. Datei von URL in eine Zeichenfolge herunterladen
- 2. Wie kann ich eine Datei von einer URL (nicht eine direkte URL) in Linux herunterladen
- 3. Wie man eine Datei von einer URL mit Javascript herunterladen?
- 4. Rails: Wie man eine Datei von einem http herunterladen und in der Datenbank speichern
- 5. Wie kann ich eine Datei in php erstellen und herunterladen
- 6. Wie kann ich ein JPEG von einer URL in eine Datei in angularjs (ionic) speichern?
- 7. Wie finde ich die URL zum Herunterladen einer Datei?
- 8. Wie kann ich eine HttpResponse in eine Datei herunterladen?
- 9. Wie kann ich doc oder pdf-Datei von UIWebView herunterladen
- 10. Wie kann ich nur meine PHP-Datei eine Datei herunterladen?
- 11. JSON-Codierung und Herunterladen von einer URL
- 12. Wie kann ich eine Variable in einer anderen Datei speichern?
- 13. Herunterladen von Js Skriptcode von einer URL
- 14. herunterladen und Zip-Datei iphone speichern
- 15. iOS: Bild von URL herunterladen und in dem Gerät speichern
- 16. Herunterladen und Speichern von Dateien in JMeter
- 17. Wie kann ich eine große Datei mit Go effizient herunterladen?
- 18. Wie kann man mit Scala eine Datei aus dem Internet herunterladen und speichern?
- 19. Wie kann ich eine XML-Datei mit C# herunterladen?
- 20. Wie füge ich beim Herunterladen einer Datei eine Erweiterung hinzu?
- 21. Herunterladen von XML-Datei von https URL
- 22. Wie kann ich eine CSV-Datei in der App "rails" in meinen Ordner/downloads herunterladen
- 23. Herunterladen von PDF-Datei und Speichern auf SD-Karte
- 24. Datei von der URL herunterladen und in ftp hochladen
- 25. Herunterladen einer Datei aus der URL und Speichern in Ressourcen auf dem iPhone
- 26. Wie kann ich eine Datei mit window.fetch herunterladen?
- 27. Codova, kann ich eine Datei herunterladen (root)/Ordner herunterladen?
- 28. eine Datei Form dynamische URL herunterladen
- 29. Wie kann ich Bilder aus dem Internet herunterladen und speichern?
- 30. Wie kann ich eine Datei in einer TaskPane App ohne window.open() herunterladen?
Das funktioniert. Vielen Dank. Ich habe das auf einem Bild versucht. Das Bild wurde nicht ordnungsgemäß in die Datei geschrieben. Als wäre es beschädigt oder so. Sie könnten mir auch helfen, dies in einer Rails-Anwendung zu tun. Kann ich das in einer Rails-Anwendung verwenden? –
Ja, Sie können es in einer Schienenanwendung verwenden. Die Datei wird nicht richtig geschrieben, weil ich vergessen habe, das Ziel im Write-Binary-Modus zu öffnen. Ich werde das jetzt bearbeiten. – Levi
sollte auch 'Datei << öffnen ('http://example.com/image.png') .read' – mraaroncruz