首页 > 解决方案 > 在 Flask 中上传文本文件并在 html 中读取

问题描述

我正在尝试上传一个简单的文本文件,然后将其显示在烧瓶中的另一个 URL 中。但是,我得到一个空白输出,其中b"是唯一显示的内容。它只是一个带有 utf-8 的常规文本文件。

这是代码 -

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)

我将其包含在源 html中

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

我对 python 和烧瓶比较陌生,在这里感谢您的帮助。谢谢!

标签: pythonhtmlflask

解决方案


感谢这篇文章的评论者,我可以想出一个解决办法。最初,我得到一个b"作为使用only f.read().

当我使用 时f.seek(0),我得到了我的文本文件的输出,但是有很多编码和格式错误,包括一个的前面的 b`,然后是我的输出。

但添加 content = f.read()
content = str(content, 'utf-8')也修复了大部分问题。

所以这是最终的解决方案-

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)

并且不要忘记相同的旧 HTML -

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

我希望这也可以帮助其他人。谢谢!


推荐阅读