2016-06-27 28 views
6

ファイルをアップロードするフラスコアプリケーションを実装しようとしています。このファイルは非常に大きくなる可能性があります。たとえば、ほぼ2Gのサイズです。Flaskで大きなファイルをアップロード

私はこのように、サーバ側の処理機能を終了しました:

@app.route("/upload/<filename>", methods=["POST", "PUT"]) 
def upload_process(filename): 
    filename = secure_filename(filename) 
    fileFullPath = os.path.join(application.config['UPLOAD_FOLDER'], filename) 
    with open(fileFullPath, "wb") as f: 
     chunk_size = 4096 
     while True: 
      chunk = flask.request.stream.read(chunk_size) 
      if len(chunk) == 0: 
       return 

      f.write(chunk) 
    return jsonify({'filename': filename}) 

ブラウザ側に関しては、私はファイルを提出するから、ユーザーに与える必要があります。一度に1つのファイル。アップロードプロセスを示すプログレスバーを表示します。 しかし、私はブラウザのサイドコードについては考えていません。 JavaScriptコードを使用してアップロードを開始し、ステータスを表示するにはどうすればよいですか?

答えて

3

これはあなた自身で把握するのは難しい作業です。 https://blueimp.github.io/jQuery-File-Upload/

このプロジェクトのソースコードでは、ファイルの大きさとこれまでに転送されたデータの量とパーセンテージを表示する残量を基本的に見ているメソッド名を使用しています完全なdiv。

このプロジェクトからのコード例

progressall: function (e, data) { 
       var $this = $(this); 
       $this.find('.fileupload-progress') 
        .find('.progress').progressbar(
         'option', 
         'value', 
         parseInt(data.loaded/data.total * 100, 10) 
        ).end() 
        .find('.progress-extended').each(function() { 
         $(this).html(
          ($this.data('blueimp-fileupload') || 
            $this.data('fileupload')) 
           ._renderExtendedProgress(data) 
         ); 
        }); 
      } 

https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload-jquery-ui.js

独自の解決策を考え出すしたいのであれば、私はあなたがどのUI divの矩形を構築することにより開始を示唆していますファイルのアップロードサイズとアップロードされたデータに基づいてパーセンテージ計算に基づいて更新される動的な幅を持っているか、すでに確立されているソリューションを使用するだけです。

+0

ご協力いただきありがとうございます。 jQuery-File-Uploadは、私のアプリケーションにとって良い助けとなります。 jQuery-File-Uploadが、小さなファイルに分割する代わりに、ファイル全体をアップロードするためのストリームポスト/プット操作をサポートしているかどうか、どうすればいいのか教えてください。 –

関連する問題