| """图片服务API - 提供缓存的图片和视频文件""" |
|
|
| from fastapi import APIRouter, HTTPException |
| from fastapi.responses import FileResponse |
|
|
| from app.core.logger import logger |
| from app.services.grok.cache import image_cache_service, video_cache_service |
|
|
|
|
| router = APIRouter() |
|
|
|
|
| @router.get("/images/{img_path:path}") |
| async def get_image(img_path: str): |
| """获取缓存的图片或视频 |
| |
| Args: |
| img_path: 文件路径(格式:users-xxx-generated-xxx-image.jpg) |
| """ |
| try: |
| |
| original_path = "/" + img_path.replace('-', '/') |
|
|
| |
| is_video = any(original_path.lower().endswith(ext) for ext in ['.mp4', '.webm', '.mov', '.avi']) |
| |
| if is_video: |
| cache_path = video_cache_service.get_cached(original_path) |
| media_type = "video/mp4" |
| else: |
| cache_path = image_cache_service.get_cached(original_path) |
| media_type = "image/jpeg" |
|
|
| if cache_path and cache_path.exists(): |
| logger.debug(f"[MediaAPI] 返回缓存: {cache_path}") |
| return FileResponse( |
| path=str(cache_path), |
| media_type=media_type, |
| headers={ |
| "Cache-Control": "public, max-age=86400", |
| "Access-Control-Allow-Origin": "*" |
| } |
| ) |
|
|
| |
| logger.warning(f"[MediaAPI] 未找到: {original_path}") |
| raise HTTPException(status_code=404, detail="File not found") |
|
|
| except HTTPException: |
| raise |
| except Exception as e: |
| logger.error(f"[MediaAPI] 获取失败: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|