Escrito antes:
En los últimos días, he estudiado la carga de archivos webuploader. El blog anterior registra ejemplos del uso de WebUpploader para simplemente cargar archivos. Hoy, también registraré los ejemplos de carga de fragmentos y puntos de interrupción. En el Blog Park, también he visto algo de información. Básicamente, el procesamiento de back -end de los datos es Servlets o SpringMVC. Dado que el proyecto reciente siempre ha sido Struts2, utilizaremos la acción en Struts2 para procesar los datos para lograr el efecto de cargar archivos en piezas.
1. ¿Qué es la carga de fragmentos?
Como su nombre indica, significa dividir el archivo en piezas, es decir, dejar que un archivo se divida en varios archivos pequeños y luego cargarlo. La ventaja de esto es que facilita la carga de archivos grandes.
2. Ideas generales para la carga de fragmentos:
1. En la página de recepción, seleccione el archivo y haga clic en el botón para cargar.
2. WebPloader divide los archivos cargados en números especificados y los envía al backend del servidor uno por uno.
3. El servidor recibe los archivos pequeños divididos y los almacena en una carpeta temporal.
4. Después de que el servidor recibe el archivo pequeño dividido, la página de primer plano ejecuta la función de carga exitosa.
5. En la función de carga exitosa, envíe una solicitud al servidor y solicite fusionar los archivos pequeños en un archivo completo.
6. El fondo del servidor fusiona los archivos y elimina los archivos temporales que almacenan archivos pequeños después de que se complete la fusión.
Después de comprender el proceso general de carga de fragmentos, vaya a la demostración directamente.
Página de recepción:
<%@ página contentType = "text/html; charset = utf-8" lenguaje = "java"%> <%string scheme = request.getScheme (); String ServerName = request.getServerName (); String contextPath = request.getContextPath (); int port = request.getServerPort (); // Acceso al sitio web y cadena de ruta baseUrl = esquema + ": //" + servername + ":" + puerto + contextPath; request.setAttribute ("baseUrl", baseUrl);%> <html> <fead> <title> Ejemplo simple de cargar archivos con fragmentado </title> <%-Introducción de estilos CSS-%> <link href = "$ {baseUrl} /webuploader0.1.5/webuploader.css" REL "REL =" "Overalwollow" "" REL "REL" REL "REL)" REL) "REL)" REL = "" ALTERATOR "REL)" REL) "REL) rel = "stylesheet" type = "text/css"/> <script src = "$ {baseurl} /ligerui2/jquery/jquery-1.9.0.min.js" type = "text/javaScript"> </script> <%-Introducción de la carga de archivo Plugin-%> <script type = "text/javascript" src = "$ {baseurl} /webuploader0.1.5/webuploader.min.js"> </script> <script type = "text/javaScript"> $ (function () {/* Para la creación de uploader, lo mejor es que se pueda esperar hasta que se cree el elemento DO Lugar que sea fácil de ignorar. 'Archivo'] establece el nombre del dominio de carga de archivos. es la clave. El orden de aceptación y los errores para reorganizar. JPEG, lo comprimirá y lo cargará nuevamente antes de cargar. La lógica específica de acuerdo con los requisitos del proyecto. }); (archivo, respuesta) {// lógica específica ... console.log ('cargar éxito .../n'); Math.Ceil (File.Size / (5 * 1024 * 1024)), nombre de archivo: file.name}, function (data) {}); completado, este evento se llamará independientemente del éxito o el fracaso. $ ("#btncancel"). Click (function () {// procesamiento logístico ..}); id = "btncancel"> Cancelar cargar </boton> </div> </div> </body> </html>Acción de backend:
/** * Descripción: com.ims.Action * Autor: once * Fecha: 2017/12/26 10:50 */@Controler ("FileAction") Public Class FileAction {/ * Parámetros relacionados para cada pequeño archivo utilizado para recibir la solicitud de segmentación */// // Nombre de archivo String private uploadFileName; // Tipo de carga Cadena privada uploadContentType; /** * Las siguientes variables son públicas, hay demasiados parámetros, por lo que no quiero configurarlo en privado y luego escribir el método Get and Set, * solo use público solo por elzgo */// Número de fragmento de fragmento de fragmentación de la cadena pública; Public String Guid; // fusionar y dividir se utilizan para recibir y enviar solicitudes de fusión de fusiones Nombre de archivo de cadena pública; // Nombre de archivo Public String frags; // Número de segmento // Al cargar archivos en fragmentos, este método se llamará cada vez que se cargue un archivo pequeño, que no es diferente de los archivos de guardado ordinarios public void uploadFile2 () lanza la excepción {String str = "d:/upload44/divide/"; // ruta de guardado de archivo // Guardar la ruta de cada cadena de archivo pequeño realPath = str + guía + "/" + chunk; Archivo tmp = nuevo archivo (realPath); FileUtils.copyFile (cargar, tmp); System.out.println ("Subiendo el archivo"+uploadFileName+", que bloquea:"+chunk+", size:"+(upload.length ()/1024/1024)+"m"); } // archivo fusion public void mergeFile () lanza la excepción {string path = "d:/upload44/merge/"; // Crear carpeta de fusión nuevo archivo (ruta) .mkdir (); // Crear archivo fusionado archivo newfile = nuevo archivo (ruta + nombre de archivo); if (! newfile.exists ()) {newfile.createNewFile (); } FileOutputStream outputStream = new FileOutputStream (newFile, true); // Agregar archivos append a byte [] byt = new byte [10 * 1024 * 1024]; int len; FileInputStream temp = null; // shash archivo para (int i = 0; i <integer.parseInt (chunks); i ++) {// "d:/upload44/divide/" + guía + "/" + i Para guardar la ruta del archivo pequeño Temp = nuevo FileInputam (nuevo archivo ("d:/upload44/divide/" + " +" + " +"); while ((len = temp.read (byt))! = -1) {system.out.println (len); outputStream.write (byt, 0, len); } temp.close (); } // Cuando todas las escrituras de append están terminadas, la secuencia se puede cerrar de salida stream.close (); // Eliminar el archivo de fragmentos string path2 = "d:/upload44/divide/" + guía; FileUtils.deletedirectory (nuevo archivo (path2)); // elimina todos los contenidos en el directorio system.out.println ("éxito! Guid =" + Guid + "; Chunks =" + Chunks + "; FileName =" + FileName); } archivo público getupload () {return upload; } public void setupload (file upload) {this.upload = upload; } public String getuploadFileName () {return uploadFileName; } public void setUploadFileName (String uploadFileName) {this.uploadFileName = uploadFileName; } public String getuploadContentType () {return uploadContentType; } public void setUploadContentType (String uploadContentType) {this.uploadContentType = uploadContentType; }}Struts.xml Configuración:
<Action name = "uploadFile2" métode = "uploadFile2"> </action> <Action name = "MergeFile" Method = "MergeFile"> </Action>
Ok, aquí, se completa cargar un punto de interrupción de fragmentación de archivo simple.
Por cierto, el fondo solo recibe algunos parámetros simples y, por supuesto, hay más que los parámetros anteriores pasados por parte de la base webader frontal. Por lo tanto, puede aprender a usar el modo de depuración F12 para ver las solicitudes enviadas y los parámetros de solicitud relacionados. No hablaré de eso aquí.
Ejecución de captura de pantalla:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.