import json import os import httpx async def process_pdf_logic(pdf_file): """ 接收 PDF 文件并转发到解析服务 """ # 验证文件类型 if not pdf_file.content_type.startswith("application/pdf"): raise Exception(400, "仅支持 PDF 文件") try: # 读取文件内容 # file_content = await pdf_file.read() # 配置目标接口参数 target_url = os.getenv("Mineru_URL","http://172.18.30.122:9988") target_url = target_url + "/analyze-pdf" # target_url = os.getenv("Mineru_URL","http://172.18.127.124:9088/pdf_parse") # target_url = "http://172.18.30.122:8998/pdf_parse" # params = { # "parse_method": "auto", # "is_json_md_dump": "true", # "output_dir": "output" # } # 构建文件上传格式 files = { "file": (pdf_file.filename, pdf_file.file, "application/pdf") # "pdf_file": (pdf_file.filename, pdf_file.file, "application/pdf") } # 发送请求到解析服务 async with httpx.AsyncClient(timeout=1200.0) as client: response = await client.post( target_url, # params=params, files=files, headers={"Accept": "application/json"} ) response.raise_for_status() result = response.json() full_content = result.get("data", {}).get("full_content", "") content_list = result.get("data", {}).get("content_list", []) # markdown_content ="" # for content in content_list: # text = content["text"] return full_content,content_list except httpx.RequestError as e: raise Exception(503, f"无法连接到解析服务: {str(e)}") except Exception as e: raise Exception(500, f"服务器内部错误: {str(e)}") import asyncio from pathlib import Path async def test_request(path): pdf_path = Path(path) async with httpx.AsyncClient() as client: with open(pdf_path, "rb") as f: files = {"file": (pdf_path.name, f, "application/pdf")} response = await client.post( "http://172.18.30.122:9988/analyze-pdf", files=files, timeout=120 ) result = response.json() full_content = result.get("data", {}).get("full_content", "") content_list = result.get("data", {}).get("content_list", []) combined_json = ''.join(content_list) content_data = json.loads(combined_json) for item in content_data: if isinstance(item, dict): # 确保是字典类型 text = item.get("text", "") page_idx = item.get("page_idx", -1) # 默认值 -1 表示缺失 print(f"Text: {text}\nPage Index: {page_idx}\n{'-'*50}") if __name__ == "__main__": # asyncio.run(test_request("/Users/lijinxuan/PycharmProjects/Sea/AutoRag/src/examples/邱茜茜.pdf")) asyncio.run(test_request("/Users/lijinxuan/PycharmProjects/Sea/AutoRag/src/examples/邱茜茜.pdf"))