Ich schreibe meine erste Kolbenanwendung. Ich habe es mit Datei-Uploads zu tun, und im Grunde möchte ich die Daten / Inhalte der hochgeladenen Datei lesen, ohne sie zu speichern, und sie dann auf der resultierenden Seite drucken. Ja, ich gehe davon aus, dass der Benutzer immer eine Textdatei hochlädt.
Hier ist die einfache Upload-Funktion, die ich verwende:
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
a = 'file uploaded'
return render_template('upload.html', data = a)
Im Moment speichere ich die Datei, aber ich brauche diese 'a'-Variable, um den Inhalt / die Daten der Datei zu enthalten. Irgendwelche Ideen?
file = request.files.get('file')
filetype = magic.from_buffer(file.read(1024))
f = request.files['file']
die hochgeladene Datei (in der Anfrage) in eine Variable ("f") ein. Dannf.read()
funktioniert dann mit dem obigen Code. Wannprint f.read()
bekomme ich richtig aussehenden Müll im Terminal? Hoffentlich hilft das.mystring = TextIOWrapper(binary_stream)
f.read()
hat mir auch nichts gebracht. Das erste Anrufenf.seek(0)
hat den Trick für mich getan.Wenn Sie Standard-Flask-Inhalte verwenden möchten, können Sie das Speichern einer temporären Datei nicht vermeiden, wenn die Größe der hochgeladenen Datei> 500 KB beträgt. Wenn es kleiner als 500 KB ist, wird "BytesIO" verwendet, das den Dateiinhalt im Speicher speichert, und wenn es größer als 500 KB ist, wird der Inhalt in TemporaryFile () gespeichert (wie in der werkzeug-Dokumentation angegeben ). In beiden Fällen wird Ihr Skript blockiert, bis die gesamte hochgeladene Datei empfangen wurde.
Der einfachste Weg, dies zu umgehen, ist:
1) Erstellen Sie Ihre eigene dateiähnliche E / A-Klasse, in der Sie die gesamten eingehenden Daten verarbeiten
2) Überschreiben Sie in Ihrem Skript die Anforderungsklasse mit Ihrer eigenen:
3) Ersetzen Sie die request_class von Flask durch Ihre eigene:
4) Geh und trink ein Bier :)
quelle
Ich habe versucht, genau das Gleiche zu tun, eine Textdatei zu öffnen (eigentlich eine CSV für Pandas). Ich möchte keine Kopie davon erstellen, sondern nur öffnen. Die Form-WTF hat einen schönen Dateibrowser, öffnet dann aber die Datei und erstellt eine temporäre Datei, die sie als Speicherstrom darstellt. Mit ein wenig Arbeit unter der Haube,
quelle
Ich teile meine Lösung (vorausgesetzt, alles ist bereits für die Verbindung mit Google Bucket in Flask konfiguriert).
Mein Post
Direkt zu Google Bucket in der Flasche
quelle
Für den Fall, dass wir die In-Memory-Datei auf die Festplatte kopieren möchten. Dieser Code kann verwendet werden
quelle
Wir haben einfach gemacht:
quelle
in Funktion
in HTML-Datei
quelle