0

如何限制上传到 Flask 只允许.csv上传文件?我一直在努力,但做不到。

到目前为止,我已经设法阻止所有文件或上传所有文件。我只需要上传.csv文件。

这是我尝试过的:

UPLOAD_FOLDER = "/Users/osito/Desktop/efisys-git/efisys/Webb_App/static/archivos"
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

ALLOWED_EXTENSIONS = set(['csv'])

def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route("/carga", methods=["GET", "POST"])
def carga():
if request.method == "POST":  
archivo = request.form['archivo']  
    if archivo.filename == "":
        flash(u"NO selected file", 'error')
    if not allowed_files(archivo.filename):
        flash(u'only csv files', 'error')                                              

    return redirect(request.url)  
return render_template('home.html')

这是HTML ..

<input id="upload" type="file" name="file" onchange="readURL();"/>
<form action="/carga" method="POST" enctype="multipart/form-data">
    <h2>Suba Aquí su Archivo CSV </h2>
    <div class="form-group area">
        <input type="hidden" class="form-control" name="archivo" id="archivo">
    </div>
    <button type="submit" name="archivo" class="btn btn primary">Subir</button>
</form>
4

2 回答 2

0

像这样的条件可能会奏效:

if filename.rsplit('.', 1)[1].lower()=='csv':
# >>> process file here <<<

编辑:与此同时,我看到您添加了更多代码。您有一个名为allowed_file. 但是您正在进一步调用allowed_file

if not allowed_files(archivo.filename):
        flash(u'only csv files', 'error')

那是你出错的地方还是只是问题中的错字?

于 2020-02-11T15:41:15.770 回答
0

您可以查看这篇文章可能会有所帮助:D

https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/

有一个示例允许您指定允许的扩展名

ALLOWED_EXTENSIONS = {'txt'、'pdf'、'png'、'jpg'、'jpeg'、'gif'}

所以尝试用一个输入替换它,在你的情况下是 csv

于 2020-02-11T15:40:04.470 回答