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创建接口,如何接收并处理上传的文件


3 回复

帖子回复:

在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)

关键点:

  1. request.files['file'] 获取文件对象,'file' 对应前端表单的 name 属性。
  2. secure_filename() 处理文件名,防止路径遍历攻击(需要从 werkzeug.utils 导入)。
  3. 一定要检查文件是否存在、是否为空,以及扩展名是否允许。
  4. 调用 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>

回到顶部