繁体   English   中英

没有文件上传时如何解决Flask中的UploadNotAllowed错误?

[英]How to fix UploadNotAllowed error in Flask when no file is uploaded?

我有一个相当基本的Bootstrap表单,其中包含文件上传,该文件上传在后端通过Python,Flask,Flask-Uploads处理并插入到MongoDB数据库中。 当我测试提交的表单中没有包含文件的表单时,即使我的代码中有故障保护功能(如果不包含文件的话,默认为静态图像),也会从Flask-Uploads中收到一个UploadNotAllowed错误。

我在我的Python代码中包含了一个if语句,据我所知,该语句应在'insert_one'函数中包含一个默认图像,该图像将数据从表单移至数据库,但是几乎就像忽略了该语句一样当我运行代码时。

这是我的Python代码的相关部分(为简洁起见,删除了一些部分):

import os, datafunctions
from flask import Flask, render_template, url_for, request, session, redirect, flash
from flask_pymongo import PyMongo, pymongo
from bson.objectid import ObjectId
from werkzeug.security import generate_password_hash, check_password_hash
# Adding flask_uploads to allow custom recipe images to be uploaded by users
from flask_uploads import UploadSet, configure_uploads, IMAGES

# Flask_uploads configuration for image uploads
images = UploadSet('images', IMAGES)
app.config['UPLOADED_IMAGES_DEST'] = 'static/images/uploads'
configure_uploads(app, images)

# Insert recipe to database
@app.route('/insert_recipe', methods=['POST'])
def insert_recipe():
    # Upload image to uploads folder and generate filepath
if 'image' in request.files:
    filename = images.save(request.files['image'])
    filepath = '../static/images/uploads/' + filename
else:
    filepath = '../static/images/default.jpg'
# Submits to temp_recipes collection to allow for preview without displaying in recipe-results
temp_recipes = mongo.db.temp_recipes
new_recipe = temp_recipes.insert_one(
    {
    'image': filepath,
    }
)

和我的Bootstrap表单中的文件输入字段:

<div class="input-group">
    <div class="input-group-prepend">
        <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
    </div>
    <div class="custom-file">
        <input type="file" class="custom-file-input" id="image" name="image" aria-describedby="inputGroupFileAddon01">
        <label class="custom-file-label" for="image">Choose file</label>
    </div>
</div>

当我尝试提交不包含图像的表单时,出现以下错误:

flask_uploads.UploadNotAllowed

当我尝试提交表单并包含图像时,它会完美提交并将所有我希望的数据插入到MongoDB数据库中。

想通了这一点-事实证明,我需要在if语句中使用以下内容:

if 'image' in request.form:

而不是:

if 'image' in request.files:

这么小的事情,那么大的头痛!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM