2 votes

Charger un fichier texte dans Flask et le lire en html

J'essaie de télécharger un simple fichier texte puis de l'afficher dans une autre URL dans flask. Cependant, j'obtiens une sortie vide avec b" comme la seule chose qui apparaît. C'est juste un fichier texte normal avec utf-8.

Voici le code -

def upload_source():
if request.method == 'POST':
    # check if the post request has the file part
    f = request.files['file']
    if f.filename == "":
        print("No file Name")
        return redirect(request.url)
    if not allowed_file(f.filename):
        print("File extension not allowed!")
        return redirect(request.url)
    else:
        full_filename = secure_filename(f.filename)
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], full_filename))
        print("File saved")
        content = f.read()
        return render_template('source.html', text=content)

et j'inclus ceci dans le source html

<p> {{ text }} </p>

Je suis relativement novice en matière de python et de flask et j'apprécie votre aide ici. Merci !

1voto

Nikz Points 41

Grâce aux commentateurs de cet article, j'ai pu trouver une solution à ce problème. Au départ, j'obtenais un b" comme le sólo après avoir utilisé only f.read() .

Quand j'ai utilisé f.seek(0) j'ai obtenu la sortie de mon fichier texte, mais avec de nombreuses erreurs d'encodage et de formatage, dont une erreur de type nouveau précédant le b` suivi de ma sortie.

Mais en ajoutant content = f.read()
content = str(content, 'utf-8') J'ai corrigé la plupart de ces problèmes.

Voici donc la solution finale -

def upload_source():
if request.method == 'POST':
    # check if the post request has the file part
    f = request.files['file']
    if f.filename == "":
        print("No file Name")
        return redirect(request.url)
    if not allowed_file(f.filename):
        print("File extension not allowed!")
        return redirect(request.url)
    else:
        full_filename = secure_filename(f.filename)
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], full_filename))
        f.seek(0)
        print("File saved")
        content = f.read()
        content = str(content, 'utf-8')
        return render_template('source.html', text=content)

et n'oubliez pas le bon vieux HTML

<p> {{ text }} </p>

J'espère que cela pourra aider d'autres personnes. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X