2015-02-10 64 views
1

我的代碼當前需要一個文件,並將其保存到一個預設目錄,但它可能只是使用該文件(讀取文件),而不是保存它?Python燒瓶上傳文件,但不保存和使用

@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") 

我曾經嘗試都

file.read()和file.stream.read(),但返回值是空的。我確認該文件存在於上傳的目錄中,並且看到該文件不是空的。

+0

沒有'file.read()'? – ForceBru 2015-02-10 17:35:46

+0

也嘗試過:(@ForceBru – 2015-02-10 17:37:49

+0

[讀取文件數據而不保存在Flask中]可能的重複(http://stackoverflow.com/questions/20015550/read-file-data-without-saving-it-in-flask ) – ForceBru 2015-02-10 17:41:16

回答

0

在致電file.read()之前,請確保您沒有用file.save()保存該文件。

所以,你的函數是:

@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) 
      contents = file.read() 
      # do something with file contents 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
      return "yatta" 
     else: 
      return "file not allowed" 

    return render_template("index.html") 

希望這有助於!

1

我知道這是非常過時的,但爲了讓人們在這裏進行類似的查詢,在這裏它是如果你想節省在病房後面讀你的文件。看起來像Werkzeug的FileStorage類(它是在Flask中處理上傳文件的類),指示在每次操作(保存或讀取)後結束文件。因此,在執行任何後續操作之前,我們必須將指針移動到文件的開頭。我在下面的答案中使用python的熊貓,因爲我通常將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") 
+0

寶貴 - 文件.stream.seek(0)是一個隱藏的寶石 - 非常感謝! – jtlz2 2017-11-10 12:01:10

+0

高興能幫助:) – addicted 2017-11-12 15:11:43