我正在通过Python 3.7.1使用Flask,Flask-Bootstrap和Flask-Uploads创建一个非常简单的应用程序,该应用程序接受包含原始数据的csv文件。
“上传”页面必须仅允许上传.csv文件。我已经尝试实施this post.
上给出的答案使用.csv进行的上传尝试可以正常进行,但是其他文件类型(例如.jpg)仍然可以接受。我在这里想念一些明显的东西吗?
'details.html'暂时仅在页面上呈现文件名。
Python代码:
Block
答案 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
也可以更改为接受错误消息。