Python+Flask图像上载“无文件部分”

Python+Flask图像上载“无文件部分”,python,image,flask,upload,Python,Image,Flask,Upload,我是python/flask新手,正在尝试在注册期间上传一张用户档案图片。我直接从他们找到的文档中获取了与文件上传相关的后端flask代码。执行注册时,我收到HTTP错误: 错误的请求浏览器或代理发送了一个请求,请求此服务器 我不明白 在我的python控制台中: 无文件部分 我正在使用一个引导分叉上载图像,并找到预览和文件名。这是我的登记表: <form action="/register" method="POST"> <div class="form-group"&g

我是python/flask新手,正在尝试在注册期间上传一张用户档案图片。我直接从他们找到的文档中获取了与文件上传相关的后端flask代码。执行注册时,我收到HTTP错误:

错误的请求浏览器或代理发送了一个请求,请求此服务器 我不明白

在我的python控制台中:

无文件部分

我正在使用一个引导分叉上载图像,并找到预览和文件名。这是我的登记表:

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

将属性enctype='multipart/form data'添加到表单标记中。因为此属性强制表单的正确HTTP请求处理

将属性enctype='multipart/form data'添加到表单标记中。因为此属性强制表单的正确HTTP请求处理

嗨,那确实有用。但现在我收到另一个异常文件NotFoundError:[Errno 2]没有这样的文件或目录:'/static/images/Screenshot_2018-03-20_16.28.40.png'与此行相关:file.saveos.path.joinapp.config['UPLOAD_FOLDER',filename./static/images/确实存在。此处我的目录结构图片:UPLOAD_文件夹是项目根目录的绝对路径,而不是相对路径。添加一个。在前面声明它为相对路径应该可以解决问题。嗨,这确实有帮助。但现在我收到另一个异常文件NotFoundError:[Errno 2]没有这样的文件或目录:'/static/images/Screenshot_2018-03-20_16.28.40.png'与此行相关:file.saveos.path.joinapp.config['UPLOAD_FOLDER',filename./static/images/确实存在。此处我的目录结构图片:UPLOAD_文件夹是项目根目录的绝对路径,而不是相对路径。添加一个。在前面把它声明为相对路径应该可以解决这个问题。
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("/")