Barra de progreso real avanzada

https://blog. = 158589924619725256747357 & biz_id = 0 & utm_source = distribuir.pc_search_result.none-task-blog-blog_SOOPENSEARCH-2

Sobre la base de mi blog anterior, la barra de progreso está optimizada.

Punto de optimización:

La barra de progreso anterior era demasiado real y se completó el procesamiento de datos de front-end, sin considerar si se procesaron los datos de back-end. De esta manera, una vez que un error de back-end hace que falle la operación del front-end y la barra de progreso del front-end llega al final, es fácil dar a los usuarios una guía incorrecta.

En esta mejora, la barra de progreso del front-end se establece artificialmente a un máximo del 98%, y la barra de progreso se mueve al 100% después de recibir la información de que se completó el procesamiento del back-end.

La razón por la que no lo modifiqué en el blog anterior y volví a escribir un artículo es porque el método en este blog requiere la cooperación de colegas de back-end. En el improbable caso de que un colega que conozca no le devuelva información, solo puede retirarse a la siguiente mejor opción.

 

texto

desde

                      <form class = 'form-horizontal' id = "myModal_add_form">
                            <div class = 'form-group'>
                                <label class = 'col-sm-2 control-label'> 上传 图像 : </label>
                                <div class = 'col-sm-10'>
                                    <input type = "file" class = "newFile" />
                                    <input type = "hidden" name = "newFileMsg" data-name = "" />
                                    <input type = "hidden" name = "userId" />
                                    <input type = "hidden" name = "faceId" />
                                </div>
                            </div>
                            <div class = 'form-group' style = "display: none;" id = "myModal_add_progressBar_Module">
                                <label class = 'col-sm-2 control-label'> 上传 进度 : </label>
                                <div class = 'col-sm-10'>
                                    <div class = "progress">
                                        <div class = "barra de progreso" id = "myModal_add_progressBar" role = "barra de progreso" aria-valuemin = "0" aria-valuemax = "100" aria-valuenow = "0" estilo = "ancho: 0;" >
                                        </div>
                                    </div>


 

Subir clave js

// Carga de imagen
    $ (". NewFile"). On ('change', function (e) {         var userName = $ (this) .parents (". Modal-content"). Find ("input [name = 'name '] "). val ();         if (userName ==" ") {             parent.layer.msg (" ¡Primero debes ingresar tu nombre! ");             document.getElementById (" myModal_add_form "). reset ();             return          } else {             if (Math.round (Number (e.currentTarget.files [0] .size) / 1024)> 10240) {                 parent.layer.msg ("La imagen es demasiado grande, comprime el tamaño y cárgala. ¡El tamaño máximo de la imagen es de 10 MB! ");                 Document.getElementById (" myModal_add_form "). Reset ();                 return              } else {                 var activityId = $ ("# searchForm"). find ("seleccionar [nombre = 'activeId']"). val ();












                var fileObj = e.currentTarget.files [0]; // js obtiene el objeto de archivo
                var name = e.currentTarget.files [0] .name;
                $ (". newFile"). parent ("div.col-sm- 10 ") .find (" input [name = 'newFileMsg'] "). Attr (" data-name ", name);
                var url =" / faceRecognition / activityManage / uploadImg? Name = "+ userName +" & activityId = "+ activityId;
                
                var form = new FormData (); // Objeto FormData
                form.append ("file", fileObj); // file object
                
                var xhr;
                xhr = new XMLHttpRequest (); // XMLHttpRequest object
                xhr.open ("post" , url, true); // modo de publicación, url es la dirección de solicitud del servidor, true este parámetro especifica si la solicitud se procesa de forma asíncrona.
                
                xhr.
                xhr.onerror = uploadFailed; // Solicitud fallida
                
                xhr.upload.onprogress = progressFunction; // [Implementación del método de llamada de progreso de
                carga ] xhr.upload.onloadstart = function () {// Método de ejecución de inicio de carga
                    ot = new Date (). getTime (); // Establecer la hora de inicio de la carga
                    oloaded = 0; // Establecer el tamaño del archivo de carga en 0 cuando comienza la carga
                };
                xhr.send (formulario); // Iniciar carga, enviar datos del formulario
                
                // Mostrar barra de progreso
                $ ("# myModal_add_progressBar_Module"). css ("mostrar", "bloquear");
            }
        }
    });

    // Subir la
    función de respuesta satisfactoria uploadComplete (evt) {         // El resultado devuelto por el servidor después de recibir el archivo         var res = JSON.parse (evt.target.responseText);         if (res.code == 0) {             // Subir exitoso             $ (".newFile"). parent ("div.col-sm-10"). find ("input [name = 'newFileMsg']"). val (res.data.url);             $ (". newFile "). parent (" div.col-sm-10 "). find (" input [name = 'userId'] "). val (res.data.id);             $ (". newFile "). parent (" div.col -sm-10 "). find (" input [name = 'faceId'] "). val (res.data.faceId);             // La barra de progreso se establece en 100%;             $ (" # myModal_add_progressBar " ) .css ("ancho", "100%");             $ ("# myModal_add_progressBar"). html ("100%");         }     }     // Error al cargar







            






    function uploadFailed (evt) {         parent.layer.msg ("Upload failed");     }     // El método de implementación del progreso de carga, que se llamará con frecuencia durante el proceso de carga     function progressFunction (evt) {         // event.total es el total a transmitir Byte, event.loaded es el byte que se ha transmitido. Si event.lengthComputable no es verdadero, event.total es igual a 0         if (evt.lengthComputable) {             // El límite de la barra de progreso nunca puede alcanzar el 100% cuando se carga, el máximo es 98%, a menos que se reciba el valor de retorno del backend. luego             configúrelo en 100% $ ("#myModal_add_progressBar"). css ("ancho", Math.floor (evt.loaded / evt.total * 100) -2 + "%");             $ ("# myModal_add_progressBar"). html (Math.floor (evt .loaded / evt.total * 100) -2 + "%");         }         var nt = new Date (). GetTime (); // Obtiene la hora actual         var pertime = (nt-ot) / 1000;












        ot = new Date (). getTime (); //
        Tiempo de reasignación , usado para el siguiente cálculo var perload = evt.loaded-oloaded; // Calcula el tamaño del archivo de la carga multiparte, unidad b
        oloaded = evt.loaded ; // Reasigne el tamaño del archivo cargado para el siguiente cálculo
    }

 

 

Supongo que te gusta

Origin blog.csdn.net/Irene1991/article/details/105294414
Recomendado
Clasificación