2016-08-16 2 views
0

要件:フラスコフレームワークを使用してファイルをアップロードする。一旦サーバーにアップロードされると、ユーザーはUIでファイルを見ることができるはずです。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に見てみたいことがあります。

これに似た別の投稿があります:Large file upload in Flask

それ以外の問題は、回線のどこかでタイムアウトになる可能性があります。残りのスタックの外観はどうなっていますか? Apache? NginxとGunicorn? Connection resetエラー、Connection timed outエラーが発生していますか、それともハングアップしていますか?

Nginxを使用している場合は、アップロードが完了するのに十分な値をproxy_read_timeoutに設定してみてください。 Apacheにはデフォルト設定があり、これがあなたが使用しているものであれば問題になります。あなたのスタックと、あなたが得ているエラーとログが何を表示しているのかをもっと知らなくても、伝えるのは難しいです。

関連する問題