Carga de archivos grandes en matraz

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

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

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

En cuanto al lado del navegador, debería dar a los usuarios un para enviar 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 de JavaScript para iniciar la carga y mostrar su estado?

Respuestas a la pregunta(1)

Su respuesta a la pregunta