Flask - Caricamento di file
Gestire il caricamento dei file in Flask è molto semplice. Ha bisogno di un modulo HTML con il suo attributo enctype impostato su "multipart / form-data", inviando il file a un URL. Il gestore dell'URL recupera il file darequest.files[] oggetto e lo salva nella posizione desiderata.
Ogni file caricato viene prima salvato in una posizione temporanea sul server, prima di essere effettivamente salvato nella posizione finale. Il nome del file di destinazione può essere hardcoded o può essere ottenuto dalla proprietà filename direquest.files[file]oggetto. Tuttavia, si consiglia di ottenere una versione sicura utilizzando l'estensionesecure_filename() funzione.
È possibile definire il percorso della cartella di caricamento predefinita e la dimensione massima del file caricato nelle impostazioni di configurazione dell'oggetto Flask.
app.config ["UPLOAD_FOLDER"] | Definisce il percorso per la cartella di caricamento |
app.config ["MAX_CONTENT_PATH"] | Specifica la dimensione massima del file da caricare, in byte |
Il codice seguente ha ‘/upload’ Regola URL visualizzata ‘upload.html’ dalla cartella dei modelli e ‘/upload-file’ Regola URL che chiama uploader() funzione che gestisce il processo di caricamento.
‘upload.html’ ha un pulsante di selezione dei file e un pulsante di invio.
<html>
<body>
<form action = "http://localhost:5000/uploader" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit"/>
</form>
</body>
</html>
Vedrai la schermata come mostrato di seguito.
Clic Submitdopo aver scelto il file. Il metodo post del modulo invoca‘/upload_file’URL. La funzione sottostanteuploader() esegue l'operazione di salvataggio.
Di seguito è riportato il codice Python dell'applicazione Flask.
from flask import Flask, render_template, request
from werkzeug import secure_filename
app = Flask(__name__)
@app.route('/upload')
def upload_file():
return render_template('upload.html')
@app.route('/uploader', methods = ['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
f.save(secure_filename(f.filename))
return 'file uploaded successfully'
if __name__ == '__main__':
app.run(debug = True)