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

时间:2019-03-17 12:23:08

标签: python python-3.x flask flask-uploads

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

“上传”页面必须仅允许上传.csv文件。我已经尝试实施this post.

上给出的答案

使用.csv进行的上传尝试可以正常进行,但是其他文件类型(例如.jpg)仍然可以接受。我在这里想念一些明显的东西吗?

'details.html'暂时仅在页面上呈现文件名。

Python代码:

Block

1 个答案:

答案 0 :(得分:3)

当您接受文件时,您将忽略上传集。您需要使用UploadSet.save() method来进行扩展名检查。

您还需要传递一系列扩展名,当前您传递一个字符串,添加一个逗号使其成为一个元组:

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, UploadNotAllowed
from 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')

我使用了message flashing(其中Flask-Bootstrap can support directly),但是您的index.html也可以更改为接受错误消息。