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

如何向FastAPI接口发送pickle文件作为输入?(遇EOFError报错)

解决FastAPI接收.pkl文件时的EOFError问题

错误原因分析

EOFError: Ran out of input 通常意味着pickle未读取到完整的序列化数据,可能由以下原因导致:

  • 本地test_file.pkl文件为空或损坏
  • 客户端文件读取/传输过程中数据不完整
  • FastAPI端接收字节数据的方式存在问题

排查与解决步骤

1. 验证本地.pkl文件有效性

先排除文件本身的问题,在本地运行以下代码测试:

import pickle

with open('test_file.pkl', 'rb') as f:
    try:
        data = pickle.load(f)
        print(f"文件有效,数据长度:{len(data)}")
    except EOFError:
        print("本地文件为空或已损坏")

如果这一步报错,说明问题出在文件本身,重新生成有效的.pkl文件即可。

2. 优化客户端代码(确保文件完整传输)

改用with语句管理文件句柄,避免因文件未正确读取导致的数据不全:

import requests

with open('test_file.pkl', 'rb') as input_file:
    files = {'input_file': input_file}
    response = requests.post('http://127.0.0.1:8000/forecast', files=files)

# 打印响应结果排查问题
print(response.status_code)
print(response.text)

3. 优化FastAPI服务端代码

推荐使用UploadFile类型接收文件,它更适合处理文件流,可直接传入pickle.load()处理:

同步版本

from fastapi import FastAPI, UploadFile
import pickle

app = FastAPI()

@app.post('/forecast')
def forecast(input_file: UploadFile):
    # 直接读取文件对象,无需手动转字节
    data = pickle.load(input_file.file)
    return {'data': len(data)}

异步版本(适合高并发场景)

from fastapi import FastAPI, UploadFile
import pickle

app = FastAPI()

@app.post('/forecast')
async def forecast(input_file: UploadFile):
    content = await input_file.read()
    data = pickle.loads(content)
    return {'data': len(data)}

内容的提问来源于stack exchange,提问作者SlimakSlimak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:05:32