Python中使用Flask创建接口,如何接收并处理上传的文件
别人一次会 post 多张图片 但是我只想取 pictype=1 的图片,flask 中如何获取这部分参数,或者有什么方法可以过滤掉 pictype=0 的部分
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, /
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7daf10c20d06
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; CIBA; .NET CLR 2.0.50727)
Host: 172.7.56.10
Content-Length: 2740000
Connection: close
Cache-Control: no-cache
-----------------------------7daf10c20d06
Content-Disposition: form-data; name=“userfile”; pictype=0&isurl=0&piclen=13000;filename="dev001_01_20110811155619_01_1.jpg"
Content-Type: image/pjpeg
<此处为图片数据或者 URL>
-----------------------------7daf10c20d06
Content-Disposition: form-data; name=“userfile”; pictype=1&isurl=0&piclen=13000;filename="dev001_01_20110811155619_01_2.jpg"
Content-Type: image/pjpeg
<此处为图片数据或者 URL>
Python中使用Flask创建接口,如何接收并处理上传的文件
帖子回复:
在Flask里处理文件上传,主要用request.files。先确保表单设置了enctype="multipart/form-data",然后后端就能拿到文件对象。下面是个完整例子:
from flask import Flask, request, jsonify
import os
app = Flask(__name__)
# 设置上传文件夹和允许的文件类型
UPLOAD_FOLDER = './uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
# 检查文件扩展名是否合法
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': 'No file part'}), 400
file = request.files['file']
if file.filename == '':
return jsonify({'error': 'No selected file'}), 400
if file and allowed_file(file.filename):
# 安全地保存文件
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return jsonify({'message': 'File uploaded successfully', 'filename': filename}), 200
else:
return jsonify({'error': 'File type not allowed'}), 400
if __name__ == '__main__':
# 确保上传目录存在
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.run(debug=True)
关键点:
request.files['file']获取文件对象,'file'对应前端表单的name属性。- 用
secure_filename()处理文件名,防止路径遍历攻击(需要从werkzeug.utils导入)。 - 一定要检查文件是否存在、是否为空,以及扩展名是否允许。
- 调用
file.save()保存文件到指定路径。
前端表单示例:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
总结: 核心就是处理好 request.files,做好安全检查,然后调用 save() 方法。
<br>request.files.get("dffff").headers["Content-Disposition"]<br>
谢谢

