Python + Flask图像上传"没有文件部分"

时间:2018-03-23 23:02:38

标签: python image flask upload

我是python / flask的新手,我正在尝试在注册过程中为用户个人资料图片上传图片。我直接从找到的here文档中获取了与文件上传相关的后端烧录代码。当我执行注册时,收到HTTP错误:

  

错误请求浏览器(或代理)发送了此服务器的请求   无法理解。

在我的python控制台中:

  

没有文件部分

我正在使用自助叉"上传图片w预览&文件名"找到here。这是我的注册表:

<form action="/register" method="POST">
  <div class="form-group">
    <label for="username">Username</label>
    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <input type="password" class="form-control" name="password" id="password" placeholder="Password">
  </div>
  <div class="form-group">
    <label for="confirm-password">Confirm Password</label>
    <input type="password" class="form-control" name="confirm-password" id="confirm-password" placeholder="Confirm Password">
  </div>
  <div class="form-group">
      <label>Profile Picture</label>
      <div class="input-group">
          <span class="input-group-btn">
              <span class="btn btn-default btn-file">
                <button class="btn btn-success">Browse…</button>
                  <input type="file" id="imgInp" name="file">
              </span>
          </span>
          <input type="text" class="form-control" readonly>
      </div>
      <img id='img-upload' style="margin-top: 10px;"/>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

这是我的后端/烧瓶的东西。

from cs50 import SQL
from flask import Flask, flash, redirect, render_template, request, session, url_for
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.exceptions import default_exceptions
from werkzeug.security import check_password_hash, generate_password_hash
from werkzeug.utils import secure_filename
import datetime
import os

UPLOAD_FOLDER = '/static/images'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.secret_key = "super secret key"
app.config["SESSION_TYPE"] = "filesystem"
db = SQL("sqlite:///data.db")
Session(app)

@app.route('/register', methods=['POST'])
def register():
    username = request.form.get("username")
    password = request.form.get("password")
    row = db.execute("SELECT * FROM users WHERE username = :username", username=username)
    if not row:
        if 'file' not in request.files:
            flash('No file part')
            print("no file part")
        file = request.files['file']
        # if user does not select file, browser also
        # submit a empty part without filename
        if file.filename == '':
            flash('No selected file')
            print("no selected file")
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',
                                    filename=filename))
        db.execute("INSERT INTO users (username, passwordHash, pictureUrl) VALUES (:username, :passwordHash, 'static/images/default.jpg')", username=username,passwordHash=generate_password_hash(password))
    else:
        return apology("Username already exists.")
    return redirect("/")

1 个答案:

答案 0 :(得分:1)

将属性enctype='multipart/form-data'添加到表单标记。由于此属性强制执行表单的正确HTTP请求处理。