DATABASE.md 5.8 KB

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:

[
  {
    "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/<file_id>

Elimina un archivo específico.

Respuesta:

{
  "success": true,
  "message": "Archivo eliminado correctamente"
}

GET /api/stats

Obtiene estadísticas de la base de datos.

Respuesta:

{
  "total_files": 150,
  "active_files": 120,
  "total_downloads": 2500
}

Scripts de Mantenimiento

cleanup.py

Script para limpiar archivos expirados y huérfanos.

Uso:

# 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

# 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:

# 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:

# Agregar al crontab para ejecutar diariamente
0 2 * * * cd /path/to/hokoritemp && python cleanup.py

Backup

# 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

# Eliminar y recrear la base de datos
rm files.db
python app.py  # Se creará automáticamente