Tengo una aplicación Rails con una página de registro, donde los usuarios completan un formulario con sus datos. Quiero agregar un campo para la imagen del usuario: en lugar de cargarla, quiero que el usuario tome una foto con su cámara web. Se supone que la imagen se guardará en el disco y la base de datos se actualizará con su nombre y ruta.
¿Cómo puedo hacer esto? Sé que el almacenamiento se manejaba anteriormente con un paperclip , pero hoy en día se realiza con Active Storage , pero ¿qué pasa con el uso de la cámara web? Buscar en Google "cámara web Ruby Gem" y limitar los resultados al último año ha sido sorprendentemente inútil, ya que la mayoría de los resultados están relacionados con la pornografía.
Si desea usar la cámara web, deberá manejar ese lado de las cosas en JavaScript. Necesitará usar la API getUserMedia para obtener acceso a la transmisión de la cámara. Una vez que tenga eso, puede capturar una imagen fija escribiendo fotogramas de la cámara en un lienzo y luego exportando el lienzo a una imagen con Canvas.toDataBlob .
Algunos navegadores exponen más acceso a la cámara para capturar imágenes , pero eventualmente obtendrás una mancha.
Una vez que tenga eso, puede agregarlo a un objeto FormData y enviarlo a su aplicación Rails, momento en el que Active Storage puede hacerse cargo del almacenamiento del archivo.