首页 > 解决方案 > Flask,无法使用 request.files 获取文件部分

问题描述

这是我的 HTML:

{% extends "layout.html" %}

{% block title %}
    Picture
{% endblock %}

{% block main %}
    <form action="/picture" method="post">
        <div>
            <p>Profile picture (32mb max).</p>
            <input type="file" id="picture" name="picture" enctype="multipart/form-data">
            <input type="submit" value="Upload">
        </div>
    </form>
{% endblock %}

这是 .py :

import sqlite3
import traceback
import sys
import os

from flask import Blueprint, render_template, redirect, session, request, flash
from application import profileName, uploadPicture, profilePicture, allowed_file
from werkzeug.utils import secure_filename

# Set Blueprints
picture = Blueprint('picture', __name__,)

@picture.route("/picture", methods=["GET", "POST"])
def pictureFunction():

    if request.method == "POST":      

        # check if the post request has the file part
        if "picture" not in request.files:
            flash("No file part")
            return redirect("/picture")

        file = request.files["picture"].read()

        # if user does not select file, browser also submit a empty part without filename
        if file.filename == "":
            flash("No selected file")
            return redirect("/picture")

        # Check if all conditions are satisfied
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join("/static", filename))
        return print(filename)


当我尝试上传 .jpg(允许的文件)时,我总是会得到:第一个“if”的“No file part”。

我不明白为什么。有人可以帮我弄清楚为什么我不能上传这个文件吗?

标签: python-3.xflask

解决方案


enctype属性应该是<form>标签的一部分,而不是您的文件<input>

所以改为执行以下操作:

    <form action="/picture" method="post" enctype="multipart/form-data">
        <div>
            <p>Profile picture (32mb max).</p>
            <input type="file" id="picture" name="picture">
            <input type="submit" value="Upload">
        </div>
    </form>

推荐阅读