# Base de Datos SQLite - HokoriTemp ## Descripción Se ha implementado una base de datos SQLite para almacenar información de los archivos subidos, reemplazando el sistema anterior basado en localStorage. ## Características ### Base de Datos - **Archivo**: `files.db` (se crea automáticamente) - **Tabla**: `files` - **Campos**: - `id`: Identificador único del archivo (UUID) - `original_filename`: Nombre original del archivo - `stored_filename`: Nombre del archivo en el servidor - `file_size`: Tamaño del archivo en bytes - `created_at`: Fecha de creación - `expires_at`: Fecha de expiración - `download_count`: Contador de descargas ### Funcionalidades #### Subida de Archivos - Los archivos se guardan físicamente en la carpeta `uploads/` - La información se almacena en la base de datos - Se genera un enlace único para descarga - **Tiempo de vida configurable**: 1 hora, 6 horas, 12 horas, 24 horas, 2 días, 3 días, 7 días #### Gestión de Enlaces - Lista de todos los archivos subidos - Información detallada: nombre, tamaño, descargas, fecha de expiración - **Eliminación permanente**: archivo físico + registro en BD se eliminan completamente #### Descargas - Verificación de existencia en BD - Verificación de expiración - Contador de descargas automático - Descarga con nombre original del archivo ## Tiempo de Vida Configurable ### Opciones Disponibles - **1 hora**: Para archivos muy temporales - **6 horas**: Para uso durante el día - **12 horas**: Para uso durante medio día - **24 horas**: Por defecto, un día completo - **2 días**: Para archivos que necesitan más tiempo - **3 días**: Para archivos de uso extendido - **7 días**: Máximo tiempo permitido ### Configuración El tiempo de vida se puede configurar desde la interfaz web antes de subir el archivo. El valor se envía al servidor y se almacena en la base de datos. ## APIs Implementadas ### GET `/api/links` Obtiene todos los enlaces guardados en la base de datos. **Respuesta**: ```json [ { "id": "uuid-del-archivo", "filename": "documento.pdf", "url": "http://localhost:5000/download/uuid-del-archivo", "created_at": "2024-01-01T12:00:00", "expires_at": "2024-01-02T12:00:00", "file_size": 1024000, "download_count": 5 } ] ``` ### DELETE `/api/delete/` Elimina un archivo específico. **Respuesta**: ```json { "success": true, "message": "Archivo eliminado correctamente" } ``` ### GET `/api/stats` Obtiene estadísticas de la base de datos. **Respuesta**: ```json { "total_files": 150, "active_files": 120, "total_downloads": 2500 } ``` ## Scripts de Mantenimiento ### cleanup.py Script para limpiar archivos expirados y huérfanos. **Uso**: ```bash # Limpieza completa python cleanup.py # Solo estadísticas python cleanup.py --stats # Solo limpiar base de datos python cleanup.py --db-only # Solo limpiar archivos físicos python cleanup.py --files-only # Ayuda python cleanup.py --help ``` ## Migración desde localStorage ### Cambios en el Frontend - **app.js**: Eliminada función `saveLinkToStorage()` - **view.js**: Actualizado para usar APIs en lugar de localStorage - **myfiles.html**: Ahora muestra información desde la base de datos ### Beneficios 1. **Persistencia**: Los enlaces se mantienen aunque se reinicie el servidor 2. **Seguridad**: Verificación de expiración en el servidor 3. **Estadísticas**: Contador de descargas y métricas 4. **Escalabilidad**: Preparado para múltiples usuarios 5. **Mantenimiento**: Scripts automáticos de limpieza ## Configuración ### Variables de Entorno ```bash # Tamaño máximo de archivo (en bytes) MAX_FILE_SIZE=16777216 # Carpeta de uploads UPLOAD_FOLDER=uploads # Clave secreta para sesiones SECRET_KEY=tu_clave_secreta_aqui ``` ### Base de Datos La base de datos se crea automáticamente al iniciar la aplicación: ```python # Se ejecuta automáticamente en app.py init_database() ``` ## Estructura de Archivos ``` hokoritemp/ ├── app.py # Aplicación principal con APIs ├── database.py # Funciones de base de datos ├── cleanup.py # Script de limpieza ├── files.db # Base de datos SQLite (se crea automáticamente) ├── uploads/ # Carpeta de archivos físicos ├── static/ │ ├── app.js # JavaScript principal (actualizado) │ └── view.js # JavaScript de vista (actualizado) └── templates/ ├── index.html # Página principal └── myfiles.html # Página de enlaces (actualizada) ``` ## Seguridad ### Eliminación Permanente Los archivos se eliminan completamente tanto del servidor como de la base de datos, ya que son archivos temporales. ### Verificación de Expiración - Se verifica en cada descarga - Se limpia automáticamente con el script de mantenimiento ### Validación de Archivos - Verificación de tamaño antes y después de la subida - Nombres de archivo seguros con `secure_filename()` - UUIDs únicos para evitar colisiones ## Mantenimiento ### Limpieza Automática Se recomienda ejecutar el script de limpieza periódicamente: ```bash # Agregar al crontab para ejecutar diariamente 0 2 * * * cd /path/to/hokoritemp && python cleanup.py ``` ### Backup ```bash # Backup de la base de datos cp files.db files.db.backup # Backup de archivos tar -czf uploads_backup.tar.gz uploads/ ``` ## Troubleshooting ### Error: "Archivo no encontrado" 1. Verificar que el archivo existe en `uploads/` 2. Verificar que el registro existe en la base de datos 3. Ejecutar `python cleanup.py --stats` para ver estadísticas ### Error: "Archivo expirado" - Los archivos expiran automáticamente después de 24 horas - Ejecutar `python cleanup.py` para limpiar archivos expirados ### Base de datos corrupta ```bash # Eliminar y recrear la base de datos rm files.db python app.py # Se creará automáticamente ```