优化临时文件管理策略。防止到处生成临时文件

This commit is contained in:
liuwei
2025-06-05 14:56:33 +08:00
parent 433adf2a9c
commit 8233770a5f

View File

@@ -2,6 +2,7 @@ import subprocess
import time
import markdown
from pathlib import Path
from playwright.async_api import async_playwright
import os
import asyncio
@@ -234,17 +235,67 @@ async def html_to_image(html_file, output_image):
# 主函数:从字符串转换 Markdown 到图片(异步版)
async def convert_md_str_to_image(md_content, output_image):
async def convert_md_str_to_image(md_content: str, output_image: str) -> str:
"""
将 Markdown 字符串转换为图片(异步)。
"""
timestamp = int(time.time())
temp_html = f"temp_output_{timestamp}.html"
md_str_to_html(md_content, temp_html)
await html_to_image(temp_html, output_image)
logger.debug(f"图片已生成:{output_image}")
return os.path.abspath(output_image)
Args:
md_content (str): Markdown 内容字符串
output_image (str): 输出图片的文件名(不含路径)
Returns:
str: 生成的图片文件的绝对路径
Raises:
FileNotFoundError: 如果临时目录无法创建或访问
ValueError: 如果 md_content 为空
"""
# 验证输入
if not md_content:
raise ValueError("Markdown content cannot be empty")
# 获取项目根目录
project_root = os.getcwd()
project_root_path = Path(project_root).resolve()
# 创建临时目录
temp_dir = project_root_path / "temp"
try:
temp_dir.mkdir(parents=True, exist_ok=True)
except Exception as e:
logger.error(f"Failed to create temp directory: {e}")
raise FileNotFoundError(f"Could not create temp directory: {temp_dir}")
# 生成唯一的临时文件名
timestamp = int(time.time())
temp_html_filename = f"temp_output_{timestamp}.html"
temp_html_path = temp_dir / temp_html_filename
output_image_path = temp_dir / output_image
# 确保输出图片路径的父目录存在
output_image_path.parent.mkdir(parents=True, exist_ok=True)
try:
# 将 Markdown 转换为 HTML
md_str_to_html(md_content, str(temp_html_path))
# 将 HTML 转换为图片
await html_to_image(str(temp_html_path), str(output_image_path))
logger.debug(f"图片已生成:{output_image_path}")
return str(output_image_path.resolve())
except Exception as e:
logger.error(f"Error converting markdown to image: {e}")
raise
finally:
# 可选:清理临时 HTML 文件
if temp_html_path.exists():
try:
temp_html_path.unlink()
logger.debug(f"Deleted temporary HTML file: {temp_html_path}")
except Exception as e:
logger.warning(f"Failed to delete temporary HTML file: {e}")
# 示例使用
if __name__ == "__main__":