Tengo una URL a una imagen que quiero guardar localmente, para poder usar Paperclip para producir una miniatura para mi aplicación. ¿Cuál es la mejor manera de descargar y guardar la imagen? (Investigué el manejo del archivo ruby pero no encontré nada).
ruby-on-rails
ruby
file-handling
Alok Swain
fuente
fuente
IO.copy_stream(open('http://example.com/image.png'), 'destination.png')
require 'open-uri'
, solo usé el código debajo de élUna versión aún más corta:
Para mantener el mismo nombre de archivo:
fuente
Si está utilizando PaperClip, la descarga desde una URL ahora se gestiona automáticamente.
Asumiendo que tienes algo como:
En su modelo, simplemente especifique la imagen como una URL, algo como esto (escrito en letra deliberada):
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 tomará desde allí.
fuente: documentación de clip
fuente
Creo que esta es la forma más clara:
fuente
Echa un vistazo a Net :: HTTP en la biblioteca estándar. La documentación proporciona varios ejemplos sobre cómo descargar documentos usando HTTP.
fuente
Kernel#open
permite no solo el acceso a los archivos, sino también la invocación del proceso mediante el prefijo de un símbolo de tubería (por ejemplo,open("| ls")
). Por lo tanto, puede conducir a un grave riesgo de seguridad al usar entradas variables para el argumento deKernel#open
.