2016-08-16 45 views
0

要求:使用燒瓶框架上傳文件。一旦上傳到服務器用戶應該能夠在用戶界面中看到該文件。使用python燒瓶上傳大型csv文件的最佳方式

當前代碼:爲了滿足上述要求,我編寫了上傳足夠大的文件的代碼,並且其工作正常(〜30 MB文件,當然沒有那麼快)。但是,當我嘗試上傳(〜100 MB)文件時,它耗時過長,進程永遠無法完成。

這是目前我在做什麼:

UPLOAD_FOLDER =「/ tmp目錄」

file = request.files['filename'] 
    description = request.form['desc'] 

    filename = secure_filename(file.filename) 
    try: 
     file.save(os.path.join(UPLOAD_FOLDER, filename)) 
     filepath = os.path.join(UPLOAD_FOLDER, filename) 
    except Exception as e: 
     return e 
    data = None 
    try: 
     with open(filepath) as file: 
      data = file.read() 
    except Exception as e: 
     log.exception(e) 

所以我在做什麼,首先將文件保存到服務器的臨時位置,然後從此閱讀數據並將其放入我們的數據庫。我認爲這是我掙扎的地方,我不確定什麼是最好的方法。

我應該從用戶那裏得到輸入並返回成功消息(顯然用戶將不能立即訪問該文件,然後),並使用某種隊列系統將數據放入數據庫後臺進程。或者還應該做些什麼來優化代碼。

回答

1

在燒瓶側確保你有設置得足夠高的MAX_CONTENT_LENGTH配置值:

app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024 # 100MB limit 

你也可能想看看進入Flask-Upload extension

還有一個SO貼子和這個貼子相似:Large file upload in Flask

除此之外,你的問題可能是沿線的超時。你的堆棧的其餘部分是什麼樣的? Apache的? Nginx和Gunicorn?您是否收到Connection reset錯誤,Connection timed out錯誤還是隻是掛起?

如果您使用Nginx,嘗試設置proxy_read_timeout的值足夠高,以便上傳完成。如果這是你正在使用的,Apache也可能有一個默認設置,導致你麻煩。如果不知道更多關於堆棧的信息,以及獲取的錯誤和日誌顯示的內容,很難說清楚。

相關問題