FastAPI中如何通过GET接口将Zip文件内容转为JSON展示在UI?
修复
convert_df接口的步骤 1. 补充缺失的依赖导入
你的代码缺少必要的模块导入,必须在代码开头添加以下内容:
from fastapi import FastAPI, JSONResponse from fastapi.encoders import jsonable_encoder import zipfile import pandas as pd import datetime
2. 添加异常捕获逻辑
当前接口未处理任何异常(比如文件不存在、ZIP损坏),会直接导致服务崩溃。需要补充异常处理:
@app.get('/zip_display') def convert_df(): try: with zipfile.ZipFile("files.zip", mode="r") as archive: # 构建文件信息的DataFrame df = pd.DataFrame([ ( zinfo.filename, datetime.datetime(*zinfo.date_time).strftime("%Y-%m-%d %H:%M:%S"), # 转字符串避免序列化失败 zinfo.file_size ) for zinfo in archive.filelist if not zinfo.is_dir() # 可选:过滤掉文件夹条目 ], columns=["filename", "date_time", "file_size"]) json_data = jsonable_encoder(df) return JSONResponse(content=json_data) except zipfile.BadZipFile: return JSONResponse(content={"Error": "Zip文件已损坏"}, status_code=400) except FileNotFoundError: return JSONResponse(content={"Error": "未找到指定的Zip文件"}, status_code=404) except Exception as e: return JSONResponse(content={"Error": str(e)}, status_code=500)
3. 解决日期序列化问题
原代码中的datetime.datetime(*zinfo.date_time)是datetime对象,jsonable_encoder无法直接序列化,需要用strftime转成可读的字符串格式(比如"%Y-%m-%d %H:%M:%S")。
4. 确保文件路径正确
确认files.zip放在FastAPI应用的运行目录下,或者直接使用绝对路径指定文件位置,比如:
zip_file_path = "/你/的/文件/绝对路径/files.zip" with zipfile.ZipFile(zip_file_path, mode="r") as archive: # 后续逻辑不变
测试接口
启动FastAPI应用后,访问http://localhost:8000/zip_display,即可看到ZIP内的文件列表以JSON格式返回,示例格式如下:
[ {"filename": "test1.txt", "date_time": "2024-05-20 14:30:00", "file_size": 1024}, {"filename": "data.csv", "date_time": "2024-05-20 14:31:00", "file_size": 2048} ]
内容的提问来源于stack exchange,提问作者SARTHAK
相关产品推荐
相关产品推荐

