STREAM FOR LABS: Sistema para compartir archivos (NASS)

Arquitectura

Basado en los requerimientos del proyecto y los diferentes servicios que este debe tener, se planteó la siguiente arquitectura, la cual está dividida en dos partes.

Podemos visualizar en las siguientes figuras, en las cuales se quiere explicar que existen aplicaciones clientes, sea un navegador web o servicio de sincronización que consumirán una serie de servicios que estarán contenerizados con Docker, esto se hizo para distribuir los servicios necesitados y de esta forma para la aplicación cliente el backend sea transparente, es decir, conoce que existe, pero no como funciona.


A continuación se presentarán los distintos servicios brindados por la aplicación web.


Sesiones de la aplicación web


Login

El login el cual está compuesto por uno sección para usuarios normales y usuarios administradores, este es el punto de entrada a la aplicación, esta está protegida con un captchat y se expresan las condiciones de uso de la aplicación que el usuario debe aceptar para poder continuar.

Login Usuario Administrador

Login Usuarios Normales


Files

Esta sección es considera el home del usuario, el cual contiene tres directorios: videos, photos y files, en dichos directorios se almacenarán los archivos con la extensión correspondiente.


Photo

En este apartado el usuario podrá visualizar las imagenes que ha subido. Se realizó un ordenamiento por medio de una función Sort() para que el usuario pueda ordenar las imagenes por nombre o por fecha.


Adicionalmente, el usuario puede presentar las imagenes, hacer zoom, eliminar una imagen, entre otras funcionalidades del servicio.


Video

La interfaz de archivos de video está conformada por un reproductor de video por streaming y una lista de los diferentes archivos de video disponibles del usuario. En caso de que el usuario no posea archivos de video podrá ver solamente el encabezado de la lista con un texto indicando que puede subir archivos. Al reproducir un archivo se podrá visualizar el nombre del archivo y la fecha de actualización, además, en la lista se puede ver el tamaño del archivo y se tiene la opción de compartir y descargar los archivos.


Para el streaming nos basamos en el estándar definido en el "RFC 7223", la cual trata  el header Range, esta cabecera le indica al servidor que requiere de un trozo de información, más conocido como un pedazo o stream para ir reproduciendo el video con la información entrante.


Shared

Con el fin de compartir archivos con otros usuarios se desarrolló una vista “Modal”, de esta manera se podrá acceder mediante un filtro al usuario al que se quiera conceder acceso aun archivo. Al concceder acceso, otro usuario determinado podrá visualizar el archivo seleccionado.

El usuario podrá ver con quien ha compartido el archivo y su fecha.


Administration

Esta sección es la encargada de agrupar las opciones de configuración de un usuario administrador. El administrador puede elegir un valor que indica la capacidad de almacenamiento que tendrán los usuarios disponibles, este valor se encuentra limitado por un valor máximo y mínimo definido.


Synchronization

Para implementar la funcionalidad de sincronización es necesario que la aplicación cliente pueda acceder al sistema de archivos, por lo mismo se necesita una aplicación nativa. Basado en lo anterior, usamos electrón para correr la aplicación en Windows y Linux, cuando el usuario se encuentra en la aplicación web se le pide descargar la aplicación nativa para la plataforma respectiva.

Una vez el usuario descargue la aplicación nativa y entre en la sección de sincronización se le pedirá que sincronice un directorio. Cuando el usuario seleccione el directorio la sincronización se inicia utilizando SFC y puede detenerla cuando quiera. También se detiene cuando pierde la conexión a internet y se reanuda cuando vuelve a estar conectado.

Una vez sincronizado el directorio los archivos que agregue y elimine se reflejaran en el home y se lanzara un mensaje indicando la acción.


Video del funcionamiento del proyecto

Aquí una presentación ampliada de los resultados logrados en el proyecto. En el video podremos visualizar las secciones del aplicativo con cada una de sus funcionalidades.


Visita mi proyecto: Repositorio en GitHub

Video del proyecto: Enlace a Youtube