【发布时间】:2019-08-01 20:05:14
【问题描述】:
我有一个相当基本的 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 数据库中。
【问题讨论】: