vista de pdf

This commit is contained in:
Sebastian
2025-10-29 07:50:50 +00:00
parent 46c07568bc
commit df2c184814
13 changed files with 795 additions and 102 deletions

View File

@@ -582,7 +582,7 @@ async def get_file_info(
blob_name=filename,
tema=tema or ""
)
# Convertir a objeto FileInfo
file_info = FileInfo(
name=file_data["name"],
@@ -593,12 +593,63 @@ async def get_file_info(
content_type=file_data.get("content_type"),
url=file_data.get("url")
)
logger.info(f"Información obtenida para archivo '{filename}'")
return file_info
except FileNotFoundError:
raise HTTPException(status_code=404, detail=f"Archivo '{filename}' no encontrado")
except Exception as e:
logger.error(f"Error obteniendo info del archivo '{filename}': {e}")
raise HTTPException(status_code=500, detail=f"Error interno del servidor: {str(e)}")
@router.get("/{filename}/preview-url")
async def get_file_preview_url(
filename: str,
tema: Optional[str] = Query(None, description="Tema donde está el archivo"),
expiry_hours: int = Query(1, description="Horas de validez de la URL (máximo 24)", ge=1, le=24)
):
"""
Generar una URL temporal (SAS) para vista previa de archivos
Este endpoint genera una URL con firma temporal (Shared Access Signature)
que permite acceder al archivo directamente desde el navegador sin autenticación.
La URL expira después del tiempo especificado por seguridad.
Casos de uso:
- Vista previa de PDFs en el navegador
- Mostrar imágenes sin descargarlas
- Compartir acceso temporal a archivos
Args:
filename: Nombre del archivo
tema: Tema donde está ubicado el archivo (opcional)
expiry_hours: Horas de validez de la URL (1-24 horas, por defecto 1)
Returns:
JSON con la URL temporal del archivo
"""
try:
# Generar SAS URL usando el servicio de Azure
sas_url = await azure_service.generate_sas_url(
blob_name=filename,
tema=tema or "",
expiry_hours=expiry_hours
)
logger.info(f"SAS URL generada para preview de '{filename}'" + (f" del tema '{tema}'" if tema else ""))
return {
"success": True,
"filename": filename,
"url": sas_url,
"expiry_hours": expiry_hours,
"message": f"URL temporal generada (válida por {expiry_hours} hora{'s' if expiry_hours > 1 else ''})"
}
except FileNotFoundError:
raise HTTPException(status_code=404, detail=f"Archivo '{filename}' no encontrado")
except Exception as e:
logger.error(f"Error generando preview URL para '{filename}': {e}")
raise HTTPException(status_code=500, detail=f"Error interno del servidor: {str(e)}")