Closed rpairo closed 6 years ago
Desarrollando en transferencia-ficheros.
Para la transferencia de ficheros he pensado en utilizar el formato form-data para la subida de un fichero binario, así pudiendo emparejarlo con una clave en caso de ser necesario.
En cuanto a la arquitectura para el almacenamiento de los ficheros he pensado en una estructura jerárquica así:
Sería indiferente que el nombre del directorio fuera el username o el id ya que ambos van a ser únicos. Quizá utilizar el ID pudiera evitarnos de posibles problemas generados por usernames "raros", pero podría ser controlado.
Si para el nombre del directorio usamos el nombre del usuario, no tendremos problemas con las carpetas porque en el registro se controla que este no sea una cadena cualquiera, sino una típica de nickname, la cual no presenta problemas al crearla como carpeta (por ejemplo, no se admiten caracteres especiales como /
, que podría dar lugar a error por identificarlo como un fichero anidado en un directorio).
En cuanto a usar el ID, no podemos hacerlo, ya que los usuarios no lo tienen (se identifican por el nombre de usuario).
Si tienes planeado guardar los ficheros con una estructura en la que los de cada usuario residen en un subdirectorio cuyo nombre es el del usuario, debes tener en cuenta entonces que el servicio de modificar un usuario deberá también renombrar el directorio con su nuevo nombre.
Al margen de todo esto, ¿qué aporta tener los ficheros agrupados por usuario y que no estén todos en una única carpeta?
Al refactorizar el código para implementar el cifrado de los ficheros, he descubierto un problema: la librería permbits que utilizamos para obtener los permisos y metadatos de los ficheros solo permite obtener éstos desde la ruta de un fichero o de un os.File.
Como hemos hablado, el funcionamiento de los permisos en los ficheros cuando trabajas, los cuales pierden tales permisos y se crean nuevos al persistirse en el disco del cliente. Voy a tener que crear una migración nueva que deshaga las columnas innecesarias de la base de datos, y deshacer la lógica de permisos.
Descripción
Se tendrá que implementar un servicio mediante el cual se permita la transferencia de ficheros cifrados desde cliente mediante POST.
Condiciones de satisfacción
Referencias
Transferencia de ficheros por POST.
Código de ejemplo Gin, un código de ejemplo de la estructura del post para transferir ficheros con Gin.
[x] Subida de ficheros al servidor.
[x] Cifrado del fichero
[x] Borrado de fichero
[x] Descarga de fichero (basada en el nombre de éste)
[x] Control de duplicados
[x] Listar todos los ficheros