Tengo una URL para una imagen que deseo guardar localmente, de modo que pueda usar Paperclip para producir una miniatura para mi aplicación. ¿Cuál es la mejor manera de descargar y guardar la imagen? (Miré en el manejo de archivos ruby pero no encontré nada.)¿Cómo puedo descargar un archivo desde una URL y guardarlo en Rails?
Respuesta
Prueba esto:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
Consulte Net::HTTP en la biblioteca estándar. La documentación proporciona varios ejemplos sobre cómo descargar documentos utilizando HTTP.
Si está utilizando PaperClip, la descarga de una dirección URL que ahora se realiza de forma automática.
Asumiendo que tienes algo como:
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
En su modelo, basta con especificar la imagen como una dirección URL, algo como esto (escrito en escritura a mano deliberada):
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
Usted' Probablemente quiera poner esto en un método en su modelo. Esto también funcionará bien en el sistema de archivos temporal de Heroku.
Paperclip lo llevará desde allí.
fuente: paperclip documentation
Para futuros buscadores, Paperclip ya no lo permite de manera predeterminada: https://medium.com/in-the-weeds/all-about-paperclips -cve-2017-0889-server-side-request-forgery-ssrf-vulnerabilidad-8cb2b1c96fe8 –
Una versión aún más corta:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
Para mantener el mismo nombre de archivo:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
Y más eficiente ya que la salida no se almacena como una cadena en la memoria. +1 –
Aunque en realidad es útil que se muestren ambas respuestas, para que la gente como yo pueda ver las dos, pensar en las diferencias y luego elegir conscientemente esta respuesta por las razones correctas :) –
Creo que esta es la manera más clara:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
- 1. Rieles: Cómo descargar un archivo desde un http y guardarlo en la base de datos
- 2. descargar un archivo PDF y guardarlo en la tarjeta sd y luego leerla desde allí
- 3. Descargar un archivo de la url y guardarlo en recursos en el iPhone
- 4. Descargar/Transmitir archivo desde la URL - asp.net
- 5. ¿Cómo descargar un archivo de una URL en C#?
- 6. Descargar Doc/PDF desde Internet y guardarlo en la memoria interna
- 7. Descargar archivo de URL a una cadena
- 8. descargar de forma sincrónica una imagen desde una URL
- 9. descarga de archivos desde Dropbox y guardarlo en SDCARD
- 10. ¿Cómo puedo descargar un archivo de EC2
- 11. Obtener URL y guardarlo | Extensión de Chrome
- 12. ¿Cómo puedo descargar dinámicamente un archivo javascript?
- 13. ¿Cómo puedo crear, escribir y luego devolver un archivo en C# sin guardarlo en el disco?
- 14. ¿Cómo descargar un archivo a una ruta específica desde una url determinada en un formulario de Windows?
- 15. Uso de Java para descargar archivos desde una URL HTTPS
- 16. descargar imágenes automáticamente desde cualquier ubicación URL
- 17. Descargar un archivo con Adobe AIR
- 18. cómo descargar un archivo en java?
- 19. ¿Cómo puedo descargar un archivo XML usando C#?
- 20. ¿Cómo puedo escapar una URL de una cadena en Rails?
- 21. ¿Dónde puedo descargar un archivo ascmd.exe?
- 22. Descargar un archivo con VBS
- 23. Descargar el archivo url de datos
- 24. Cómo comprobar si existe un archivo desde una url
- 25. Descargar archivo - VB6
- 26. Cómo editar el valor de un nodo de un archivo XML existente desde una tarjeta SD y guardarlo de nuevo?
- 27. ¿Cómo puedo implementar URL vanity en una aplicación de Rails?
- 28. ¿Cómo puedo cargar una imagen desde una URL en PHP
- 29. ¿Cómo puedo leer una imagen desde una URL en Java?
- 30. Descargar archivo Curl con url var
Esto funciona. Gracias. Intenté esto en una imagen. La imagen no se escribió correctamente en el archivo. Como si hubiera sido dañado o algo así. También podrías guiarme para hacer esto en una aplicación de Rails. ¿Puedo usar esto en una aplicación de Rails? –
Sí, puede usarlo en una aplicación de rieles. Es probable que el archivo no se haya escrito correctamente porque olvidé abrir el destino en el modo de escritura binaria. Voy a editar eso ahora. – Levi
también debería ser 'file << open ('http://example.com/image.png') .read' – mraaroncruz