2016-06-27 40 views
6

Dosyaları yüklemek için bir şişe uygulaması gerçekleştirmeye çalışıyorum. Bu dosya çok büyük olabilir. Örneğin, neredeyse 2G boyutunda.Büyük dosya yükleme Flask'ta

böyle sunucu tarafı süreci işlevini bitirdikten:

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

tarayıcı tarafında gelince, dosya göndermek için bir kullanıcılara vermelidir. Bir seferde bir dosya. Yükleme işlemini göstermek için ilerleme çubuğunu göster. Ancak tarayıcı tarafı kodu hakkında hiçbir fikrim yok. Yükleme işlemini başlatmak ve durumunu göstermek için javascript kodunu nasıl kullanabilirim?

cevap

3

Bu, kendi başına karar vermeniz için zor bir görev olacaktır. https://blueimp.github.io/jQuery-File-Upload/

gibi bir eklentiyi öneririm Bu projeden kaynak kodu görüyorsunuz, aslında dosyanın ne kadar büyük olduğuna ve ne kadar veri aktarıldığına ve ne kadar veri aktarıldığına bakacak bir yöntem adı kullanıyorlar. tamamla div. Kendi çözüm ile gelip istiyoruz eğer

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

Yani bu projeden

kod örneği, sana bir UI div dikdörtgen inşa ederek başlamak öneririm hangi Dosya yükleme boyutuna ve yüklenen verilere dayanarak yüzdelik hesabınıza göre güncellenen dinamik bir genişliğe sahip ... ya da zaten kurulmuş bir çözümle devam edin.

+0

Yardımlarınız için teşekkürler. jQuery-File-Upload, uygulamam için iyi bir yardımcıdır. Eğer sakıncası yoksa, lütfen jQuery-File-Upload'un küçük dosyalara bölünmek yerine, tüm dosyayı yüklemek için akış post/put işlemini destekleyip desteklemediğini ve nasıl yapılandırılacağını söyleyin. –