web y de carga grandes archivos a través de HTTP del servidor para lograr

javaweb archivos de subida

JSP carga de archivos en la parte

Carga de archivos también puede utilizar el formulario formulario para enviar la solicitud de back-end, también puede enviar una solicitud al servidor utilizando ajax

    1. enviando una solicitud a la forma forma de back-end

         <Form id = acción "postForm" = "$ {} pageContext.request.contextPath / UploadServlet" method = "post" enctype = "multipart / form-data">

            <Div class = "wrap bbxx">

                <InputType = id "texto" = nombre de "lado-perfil-name" = clase "nombre de usuario" = "forma-control">

                <InputType = id "archivo" = nombre de "ejemplo-archivo-entrada" = "avatar">

                <= Tipo de botón "enviar" class = "btn btn-efecto de ondulación-BTN-primaria"> Guardar </ botón>

            </ Div>

        </ Form>

etiquetas de código mejoradas no es necesario que la forma, implementado directamente por el control. Los desarrolladores sólo tienen que centrarse en la lógica de negocio puede ser. JS ha sido cerrado para ayudarnos mejor

    this.post_file = function ()

    {

        $ Each (this.ui.btn, la función (i, n) {n.hide ();});

        this.ui.btn.stop.show ();

        this.State = this.Config.state.Posting; //

        this.app.postFile ({id: this.fileSvr.id, pathLoc: this.fileSvr.pathLoc, pathSvr: this.fileSvr.pathSvr, lenSvr: this.fileSvr.lenSvr, campos: this.fields});

    };

Los controles pueden ver los datos enviados a través de la herramienta de monitoreo, la depuración muy claro, muy simple.

2. enviar una solicitud al programa de fondo a través de AJAX

            $ .Ajax ({

                 url: "$ {} pageContext.request.contextPath / UploadServlet",

                 escribir: "POST",

                 datos:. $ ( '#postForm') serialize (),

                 el éxito: function (datos) {

                      $ ( '#ServerResponse') html (datos).;

                 },

                 error: function (datos) {

                      $ ( '#ServerResponse') html (data.status + ":" + data.statusText + ":" + data.responseText).;

                 }

            });

ajax divide en dos partes, parte de la inicialización, la notificación de solicitud de carga de archivos antes de la operación de inicialización del servidor realiza mediante AJAX

    this.md5_complete = function (JSON)

    {

        this.fileSvr.md5 = json.md5;

        this.ui.msg.text ( "cálculo de MD5 se ha completado, la conexión con el servidor ...");

        this.event.md5Complete (esto, json.md5); // evento biz

 

        var loc_path = encodeURIComponent (this.fileSvr.pathLoc);

        var loc_len = this.fileSvr.lenLoc;

        var loc_size = this.fileSvr.sizeLoc;

        var PARAM = jQuery.extend ({}, this.fields, this.Config.bizData, {md5: json.md5, id: this.fileSvr.id, LENLOC: loc_len, sizeLoc: loc_size, pathLoc: loc_path, tiempo: nuevo . fecha () getTime ()});

 

        $ .Ajax ({

            escribir: "GET"

            , Tipo de datos: 'jsonp'

            , Jsonp: "devolución de llamada" devolución de llamada // nombre de la función de jsonp definido, nombres de función aleatoria por defecto se genera automáticamente para jQuery

            , Url: this.Config [ "UrlCreate"]

            , Los datos: param

            , El éxito: function (SV)

            {

                _this.svr_create (sv);

            }

            , Error: function (req, txt, err)

            {

                _this.Manager.RemoveQueuePost (_this.fileSvr.id);

                alert ( "! MD5 mensaje enviado al error del servidor" + req.responseText);

                _this.ui.msg.text ( "información Enviar MD5 para el error de servidor");

                _this.ui.btn.cancel.show ();

                _this.ui.btn.stop.hide ();

            }

            , Completa: function (req, sta) {req = null; }

        });

    };

 

La notificación se envía al servidor después de la carga del archivo

    this.post_complete = function (JSON)

    {

        this.fileSvr.perSvr = "100%";

        this.fileSvr.complete = true;

        $ Each (this.ui.btn, la función (i, n)

        {

            n.hide ();

        });

        this.ui.process.css ( "ancho", "100%");

        this.ui.percent.text ( "(100%)");

        this.ui.msg.text ( "carga completa");

        this.Manager.arrFilesComplete.push (this);

        this.State = this.Config.state.Complete;

        // eliminar de la lista de carga

        this.Manager.RemoveQueuePost (this.fileSvr.id);

        // eliminar la lista nunca se carga

        this.Manager.RemoveQueueWait (this.fileSvr.id);

 

        var PARAM = {md5: this.fileSvr.md5, uid: this.uid, id: this.fileSvr.id, tiempo: new Date () getTime ().};

 

        $ .Ajax ({

            escribir: "GET"

              , Tipo de datos: 'jsonp'

              , Jsonp: "devolución de llamada" devolución de llamada // nombre de la función de jsonp definido, nombres de función aleatoria por defecto se genera automáticamente para jQuery

              , Url: _this.Config [ "UrlComplete"]

              , Los datos: param

              , El éxito: function (msg)

              {

                  _this.event.fileComplete (_Está); // evento de disparo

                  _this.post_next ();

              }

              Error: function (req, txt, err) {alert ( "Archivo - mensaje completo transmitida al servidor Error!" + Req.responseText);}

              , Completa: function (req, sta) {req = null; }

        });

    };

 

Debe ser MD5 una segunda transmisión procesamiento de la lógica, y cuando la presencia del mismo servidor de archivos, el usuario no tiene que volver a subir, sino que pasan directamente a notificar a los segundos de usuario

    this.post_complete_quick = function ()

    {

        this.fileSvr.perSvr = "100%";

        this.fileSvr.complete = true;

        this.ui.btn.stop.hide ();

        this.ui.process.css ( "ancho", "100%");

        this.ui.percent.text ( "(100%)");

        this.ui.msg.text ( "la presencia del mismo servidor de archivos, subir rápidamente con éxito.");

        this.Manager.arrFilesComplete.push (this);

        this.State = this.Config.state.Complete;

        // eliminar de la lista de carga

        this.Manager.RemoveQueuePost (this.fileSvr.id);

        // eliminar la lista nunca se carga

        this.Manager.RemoveQueueWait (this.fileSvr.id);

        // añadir a la lista de archivos

        this.post_next ();

        this.event.fileComplete (this); // evento de disparo

    };

Aquí se puede ver el segundo paso lógico es muy simple, no es particularmente compleja.

            Hay formdat para formar = new ();

            form.append ( "nombre de usuario", "ZXJ");

            form.append ( "Avatar", archivo);

            // forma var = new FormData ($ ( "# postForm") [0]);

            $ .Ajax ({

                url: "$ {} pageContext.request.contextPath / UploadServlet",

                escribir: "post",

                formulario de datos,

                processData: falso,

                contentType: falso,

                el éxito: function (datos) {

        

                    console.log (datos);

                }

            });

java parte

inicialización de archivo lógico, el código principal es el siguiente

FileInf fileSvr = nuevo FileInf ();

fileSvr.id = id;

fileSvr.fdChild = false;

fileSvr.uid = Integer.parseInt (UID);

fileSvr.nameLoc = PathTool.getName (pathLoc);

fileSvr.pathLoc = pathLoc;

fileSvr.lenLoc = Long.parseLong (LENLOC);

fileSvr.sizeLoc = sizeLoc;

fileSvr.deleted = false;

fileSvr.md5 = md5;

fileSvr.nameSvr = fileSvr.nameLoc;

 

// todos los archivos individuales se almacenan archivos UUID /

PathBuilderUuid pb = new PathBuilderUuid ();

fileSvr.pathSvr = pb.genFile (fileSvr.uid, fileSvr);

fileSvr.pathSvr = fileSvr.pathSvr.replace ( "\\", "/");

 

Dbconfig cfg = new dbconfig ();

DBFILE db = cfg.db ();

FileInf fileExist = nuevo FileInf ();

    

boolean existen = db.exist_file (md5, fileExist);

// mismo archivo de base de datos ya existe, y hay progreso de carga, el uso directo de esta información

si (exist && fileExist.lenSvr> 1)

{

     fileSvr.nameSvr = fileExist.nameSvr;

     fileSvr.pathSvr = fileExist.pathSvr;

     fileSvr.perSvr = fileExist.perSvr;

     fileSvr.lenSvr = fileExist.lenSvr;

     fileSvr.complete = fileExist.complete;

     db.Add (fileSvr);

    

     // evento de disparo

    up6_biz_event.file_create_same (fileSvr);

} // Este archivo no existe

más

{

     db.Add (fileSvr);

     // evento de disparo

    up6_biz_event.file_create (fileSvr);

    

     FileBlockWriter fr = new FileBlockWriter ();

     fr.CreateFile (fileSvr.pathSvr, fileSvr.lenLoc);

}

Recibir bloques de datos de archivos, en esta lógica, recibimos los bloques de datos de archivo. Los datos de control se optimizaron para facilitar la depuración. Si puede ver los datos presentados con los controles de los instrumentos de seguimiento.

boolean isMultipart = ServletFileUpload.isMultipartContent (petición);

FileItemFactory fábrica = new DiskFileItemFactory ();  

Subir ServletFileUpload = new ServletFileUpload (de fábrica);

archivos de lista = null;

tratar

{

     archivos = upload.parseRequest (petición);

}

captura (FileUploadException e)

{// analizar el error de datos de archivos 

    out.println ( "error de datos de archivos de lectura:" + e.ToString ());

    regreso;

  

}

 

FileItem rangeFile = null;

// obtener todos los archivos subidos

Iterator fileItr = files.iterator ();

// bucle para procesar todos los archivos

while (fileItr.hasNext ())

{

     // obtener el archivo actual

     rangeFile = (FileItem) fileItr.next ();

     si (StringUtils.equals (rangeFile.getFieldName (), "pathSvr"))

     {

         pathSvr = rangeFile.getString ();

         pathSvr = PathTool.url_decode (pathSvr);

     }

}

 

boolean verificar = false;

Cadena msg = "";

Cadena md5Svr = "";

largo blockSizeSvr = rangeFile.getSize ();

if (! StringUtils.isBlank (blockMd5))

{

     md5Svr = Md5Tool.fileToMD5 (rangeFile.getInputStream ());

}

 

verificar = Integer.parseInt (blockSize) == blockSizeSvr;

if (! verificar)

{

     msg = "error tamaño de bloque sizeSvr:" + blockSizeSvr + "sizeLoc:" + blockSize;

}

 

si (verificar &&! StringUtils.isBlank (blockMd5))

{

     verificar = md5Svr.equals (blockMd5);

     si (verificar!) msg ​​= "error de bloque MD5";

}

 

si (verificar)

{

     // Guardar los datos del bloque de archivos

     res FileBlockWriter = nuevo FileBlockWriter ();

     // crear sólo el primero

     si (Integer.parseInt (blockIndex) == 1) res.CreateFile (pathSvr, Long.parseLong (LENLOC));

     res.write (Long.parseLong (blockOffset), pathSvr, rangeFile);

     up6_biz_event.file_post_block (id, Integer.parseInt (blockIndex));

    

     JSONObject o = new JSONObject ();

     o.put ( "msg", "ok");

     o.put ( "md5", md5Svr); 

     o.put ( "compensación", blockOffset); // posición de desplazamiento basado en el bloque de archivos

     msg = o.toString ();

}

rangeFile.delete ();

out.write (msg);

 

nota:

1. La parte superior del código de Java se puede utilizar directamente, escribir sólo tiene que cargar el recorrido de la imagen y para recoger los datos y la base de datos puede ser

2. Utilice los archivos de carga superiores a un flujo de bytes, de hecho, también puede utilizar otras corrientes, la necesidad de mejorar la propia prueba del lector más adelante

3. BeanUtils es una herramienta para facilitar los atributos asignados a una entidad correspondiente a la entidad

4. subir archivos no se pueden utilizar request.getParameter ( "") los parámetros de adquisición, sino directamente a la solicitud de análisis, determinando si o no cada archivo es un archivo, y después realice las operaciones correspondientes (archivo de flujo a continuación, se leen, no archivo, guardará temporalmente en un mapa.)

La mayor parte de la lógica del código de fondo es la misma, actualmente soporta MySQL, Oracle, SQL. Antes de usar la necesidad de configurar la base de datos, usted me puede referirse a escribir este artículo: http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87 % E4% BB% B6% E6 
% 96% AD% E7% 82% B9% E7% BB% AD% E4% BC% A0% E4% B8% 8A% E4% BC% A0 / acoja en que el grupo discuta "374992201 "

 

Supongo que te gusta

Origin www.cnblogs.com/songsu/p/12612073.html
Recomendado
Clasificación