Flask-Uploads 不会强制只允许 .csv 文件

我在 Python 3.7.1 中使用 Flask、Flask-Bootstrap 和 Flask-Uploads 来创建一个非常简单的应用程序,该应用程序接受包含原始数据的 csv 文件。


“上传”页面必须只允许上传 .csv 文件。我试图实现这篇文章中给出的答案。


使用 .csv 上传尝试按预期工作,但其他文件类型(例如 .jpg)似乎仍被接受。我在这里遗漏了一些明显的东西吗?


'details.html' 现在只是在页面上呈现文件名。


蟒蛇代码:


import os  

from flask import Flask, render_template, url_for, request

from flask_bootstrap import Bootstrap

from flask_uploads import UploadSet, configure_uploads


app = Flask(__name__)

Bootstrap(app)


# Upload files configuration

csv_file = UploadSet('files', ('csv'))

app.config['UPLOADED_FILES_DEST'] = 'static/uploadstorage'

configure_uploads(app, csv_file)


# index

@app.route('/')

def index():

    return render_template('index.html')


# if csv file, show the data in a table. if not csv file, reload index page

@app.route('/datauploads', methods=['GET', 'POST'])

def datauploads():


    if request.method == 'POST' and 'csv_data' in request.files:


        file = request.files['csv_data']

        filename = file.filename

        file.save(os.path.join('static/uploadstorage', filename))

        return render_template('details.html', filename=filename)


    return render_template('index.html')


if __name__ == '__main__':

    app.run(debug=True)


千巷猫影
浏览 193回答 1
1回答

收到一只叮咚

您在接受文件时忽略了上传集。您需要使用扩展检查UploadSet.save()方法才能启动。您还需要传入一系列扩展名,目前您传入一个字符串,添加一个逗号使其成为元组:csv_file = UploadSet('files', ('csv',))并在您看来使用:@app.route('/datauploads', methods=['GET', 'POST'])def datauploads():    if request.method == 'POST' and 'csv_data' in request.files:        filename = csv_file.save(request.files['csv_data'])        return render_template('details.html', filename=filename)    return render_template('index.html')UploadNotAllowed但是,您可能想要捕获异常,否则会得到 500 错误:from flask_uploads import UploadSet, configure_uploads, UploadNotAllowedfrom flask import flash@app.route('/datauploads', methods=['GET', 'POST'])def datauploads():    if request.method == 'POST' and 'csv_data' in request.files:        try:            filename = csv_file.save(request.files['csv_data'])            return render_template('details.html', filename=filename)        except UploadNotAllowed:            flash('Only CSV files can be uploaded, please correct', 'error')    return render_template('index.html')我使用了消息闪烁(Flask-Bootstrap 可以直接支持),但您index.html也可以更改为接受错误消息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python