gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:57:35 28 4
gpt4 key购买 nike

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

“上传”页面必须仅允许上传 .csv 文件。我试图实现 this post. 上给出的答案

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

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

Python 代码:

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)

最佳答案

您在接受文件时忽略了上传集。您需要使用 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 也可以更改为接受错误消息。

关于python - Flask-Uploads 不会强制只允许 .csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206995/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com