为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2021-12-08 16:10:07
我在 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, requestfrom flask_bootstrap import Bootstrapfrom flask_uploads import UploadSet, configure_uploadsapp = Flask(__name__)Bootstrap(app)# Upload files configurationcsv_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)
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您在接受文件时忽略了上传集。您需要使用扩展检查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, 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')

我使用了消息闪烁(Flask-Bootstrap 可以直接支持),但您index.html也可以更改为接受错误消息。


查看完整回答
反对 回复 2021-12-08
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信