Python 中如何直接读取表单上传的文件?
通过表单上传的文本 abc.txt 文件,然后可以直接读取吗?
file = open(form.file.data, 'r')
还是说需要先创建一个文件对象,再读取这个文件:
file = open(os.path.join(filepath, filename), 'r')
上传的文件如果可以直接从内存里读取,就避免了在本地创建一个文件对象的步骤了,是这样的吗?(直接从内存中读取,减少一次硬盘 io 的操作,降低读写出错的概率)
Python 中如何直接读取表单上传的文件?
6 回复
内存资源比硬盘资源贵
在Python中直接读取表单上传的文件,通常涉及Web框架。以Flask和FastAPI为例:
Flask示例:
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files['file_key'] # 'file_key'对应前端表单的name
content = file.read() # 直接读取为字节数据
# 或使用 file.stream 进行流式读取
return f"文件大小: {len(content)} bytes"
FastAPI示例:
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
content = await file.read()
return {"size": len(content)}
关键点:
- 通过框架的文件对象(如Flask的
request.files、FastAPI的UploadFile)获取文件 - 使用
.read()方法直接读取字节内容 - 大文件建议使用流式读取避免内存问题
总结:用框架的文件对象直接read就行。
表单上传的是 bytes,可以用 StringIO.StringIO 读取,剩下的和 file 类似。
但内存是无论如何必须用的,增加一次磁盘 io 的过程反而可能会增加内存占用的时间。当然如果是大文件必须放到磁盘处理的话另当别论。
读写出错的概率这个不用考虑,主要是考虑你现在服务的瓶颈在内存还是在磁盘 io。内存瓶颈那就流式写到磁盘流式处理,io 瓶颈那就尽可能在内存搞定。
不是很明白 如果数据要直接在内存操作 那为什么不直接进行数据 要传输文件,内存一般当作缓存,文件的功能是可复用
用 StringIO 是不是完了,还要等系统自动回收垃圾?用 file 直接 close()释放内存是不是更快一点?

