首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-Upload不会强制只允许.csv文件

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

Stack Overflow用户
提问于 2019-03-17 20:23:08
回答 1查看 1.2K关注 0票数 1

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

“上传”页面必须只允许上传.csv文件。我已经尝试实现了在this post.上给出的答案

使用.csv的上载尝试按预期工作,但其他文件类型(如.jpg)似乎仍可接受。我是不是漏掉了什么明显的东西?

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

Python代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-17 20:52:02

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

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

代码语言:javascript
复制
csv_file = UploadSet('files', ('csv',))

在您的视图中使用:

代码语言:javascript
复制
@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错误:

代码语言:javascript
复制
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也可以修改为接受错误消息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55206995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档