Archivo grande cargado en el matraz

Estoy intentando implementar una aplicación de matraz para subir archivos. Este archivo podría ser muy grande. Por ejemplo, casi 2G de tamaño.

He terminado la función de proceso del lado del servidor como esta:

@app.route("/upload/", 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}) 

En cuanto al lado del navegador, debo darles a los usuarios que envíen el archivo. Un archivo a la vez. Mostrar barra de progreso para indicar el proceso de carga. Pero no tengo idea sobre el código del lado del navegador. ¿Cómo puedo usar el código javascript para iniciar la carga y mostrar su estado?

Esta será una tarea difícil para que usted pueda descubrir por su cuenta. Sugeriría un complemento como https://blueimp.github.io/jQuery-File-Upload/

Puede ver en este código fuente de los proyectos que usan un nombre de método que esencialmente analiza qué tan grande es el archivo y cuántos datos se han transferido hasta ahora y cuánto queda para mostrar un porcentaje completo de div.

Ejemplo de código de este proyecto

 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

Por lo tanto, si desea crear su propia solución, le sugiero que comience por crear un rectángulo de UI div que tenga un ancho dynamic que se actualice de acuerdo con su cálculo de porcentaje basado en el tamaño de carga del archivo y los datos cargados … o simplemente Ir con una solución ya establecida.