You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:15:43