Flask中如何处理请求上传的.sclaris/.xml/.odt等非JSON文件?
在Flask中处理.sclaris/.xml/.odt等文件上传的实现方法
当然可以搞定!你之前用request.get_json()处理JSON数据,而文件上传属于multipart/form-data格式的请求,需要用Flask的request.files来获取上传的文件。下面我一步步给你讲清楚实现步骤:
一、Flask后端代码实现
首先写好接收文件的路由,这里给你一个完整的示例,包含文件校验、保存和内容处理的逻辑:
from flask import Flask, request import os app = Flask(__name__) # 配置上传目录和最大文件大小(可选,这里设置为32MB) app.config['UPLOAD_FOLDER'] = './uploads' app.config['MAX_CONTENT_LENGTH'] = 32 * 1024 * 1024 # 确保上传目录存在,避免保存文件时报错 if not os.path.exists(app.config['UPLOAD_FOLDER']): os.makedirs(app.config['UPLOAD_FOLDER']) @app.route('/upload', methods=['POST']) def upload_file(): # 获取上传的文件,这里的'file'是表单字段名,要和Insomnia里的设置对应 uploaded_file = request.files.get('file') # 检查是否有文件被上传 if not uploaded_file or uploaded_file.filename == '': return '请选择要上传的文件', 400 # 验证文件后缀,只允许指定格式 allowed_extensions = {'sclaris', 'xml', 'odt'} file_ext = uploaded_file.filename.rsplit('.', 1)[1].lower() if '.' in uploaded_file.filename else '' if file_ext not in allowed_extensions: return f'不支持的文件类型!仅允许.sclaris、.xml、.odt格式', 400 # 保存文件到指定目录 file_path = os.path.join(app.config['UPLOAD_FOLDER'], uploaded_file.filename) uploaded_file.save(file_path) # 如果需要直接处理文件内容(比如解析XML),可以这样读取 # 注意:读取后如果还要保存,需要把文件指针移回开头 # uploaded_file.seek(0) # content = uploaded_file.read().decode('utf-8') # 比如解析XML: # import xml.etree.ElementTree as ET # tree = ET.fromstring(content) return f'文件 {uploaded_file.filename} 上传并处理成功!', 200 if __name__ == '__main__': app.run(debug=True)
代码关键细节说明:
request.files.get('file'):通过表单字段名获取文件对象,这里的file要和你在Insomnia里设置的字段名完全一致- 文件后缀校验:避免用户上传不符合要求的文件,增强接口安全性
- 上传目录预创建:防止保存文件时因为目录不存在抛出异常
- 内容处理:如果不需要保存文件,直接读取内容解析即可,比如XML可以用内置的
xml.etree.ElementTree,ODT可以用第三方库python-odf(需要先执行pip install python-odf安装)
二、Insomnia端发送文件的设置
打开Insomnia,按照以下步骤配置请求:
- 新建一个POST请求,地址填写你的Flask路由(比如
http://localhost:5000/upload) - 切换到Body标签,选择
Form Multipart类型 - 点击
Add添加一个字段,键名设置为file(必须和Flask代码里的字段名一致),字段类型选择File - 点击右侧的文件选择按钮,选中你要上传的.sclaris/.xml/.odt文件
- 最后点击发送按钮,就能把文件传到Flask后端了
三、额外注意事项
- 生产环境不要开启
debug=True,避免泄露敏感信息和安全风险 - 如果需要处理大文件,记得调整
MAX_CONTENT_LENGTH的数值,单位是字节 - 对于.sclaris这类小众格式,需要根据其具体的文件规范来编写解析逻辑,如果有对应的Python库可以优先使用,没有的话可能需要自己解析文件内容
内容的提问来源于stack exchange,提问作者Cierniostwor
相关产品推荐
相关产品推荐

