[英]Flask - uploadnotallowed error - when renaming a file to be saved
[英]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.