Python烧瓶上传文件但不保存和使用

Stu*_*Cat 3 python flask

我的代码当前接收一个文件,并将其保存到预设目录,但是可以只使用该文件(读取文件)而不保存它吗?

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return "yatta"
        else:
            return "file not allowed"

    return render_template("index.html")
Run Code Online (Sandbox Code Playgroud)

我试过了两个

file.read()和file.stream.read()但是返回值为空.我验证该文件是否存在于上载的目录中,并看到该文件不为空.

add*_*ted 10

我知道这已经过时但是为了让人们登陆这里进行类似的调查,这里是你想在病房之后保存阅读你的文件.看起来像Werkzeug的FileStorage类(它是处理Flask中上传文件的类)指向每个操作(保存或读取)后的文件结尾.因此,在执行任何后续操作之前,我们必须将指针移动到文件的开头.我在下面的回答中使用python的pandas,因为我经常将csv读入数据帧.

import pandas as pd

@app.route('/', methods=['GET', 'POST'])
    def upload_file():
        if request.method == 'POST':
            file = request.files['file']
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

                ## snippet to read code below
                file.stream.seek(0) # seek to the beginning of file
                myfile = file.file # will point to tempfile itself
                dataframe = pd.read_csv(myfile)
                ## end snippet

                return "yatta"
            else:
                return "file not allowed"

        return render_template("index.html")
Run Code Online (Sandbox Code Playgroud)

  • 无价 - file.stream.seek(0) 是一个隐藏的宝石 - 非常感谢! (3认同)
  • `file.save(secure_filename(file.filename))` 之前的 `file.stream.seek(0)` 解决了我的空文件保存问题。非常感谢! (2认同)