Este artículo comparte los códigos específicos para la carga de múltiples archivos Javaweb y el embalaje de zip y la descarga para su referencia. El contenido específico es el siguiente
Las funciones de carga y descarga de archivos a menudo se usan en proyectos. Este artículo resume las escenas en el entorno Javaweb, la carga de múltiples archivos y las funciones de embalaje y descarga de lotes, incluidas las piezas de recepción y backend.
En primer lugar, dejemos en claro:
La página no se puede actualizar AJAX, y las solicitudes de descarga y carga se pueden enviar directamente. La carga y la descarga deben implementarse en función de toda la solicitud de página. Esta función generalmente se logra mediante la construcción de formularios de formularios en proyectos.
1. Cargar varios archivos
Los requisitos del proyecto son realizar la función de carga de imágenes múltiples. Después de referirme a los muchos métodos de complemento que se encuentran en Internet, decidí elegir la solución de carga JQuery original. Siga los pasos a continuación para publicar el código específico.
1. Parte HTML (se puede omitir para construir con JS)
<Form ID = "uploadform" método = "post" enctype = "multipart/form-data"> <input type = "file" Hidden name = "fileImage" múltiple/> <a href = "javaScript: void (0);" rel = "nofollow externo" rel = "externo nofollow" id = "filesubMit" onClick = "uploadFilemulti ()"> Información de carga </a> </form>
Hay algunas explicaciones:
1. Enctype = "multipart/form-data" en forma
2. En el ejemplo, use etiquetas para construir envío
2. JS Part
var formData = new FormData ($ ("##uploadform") [0]); formdata.append ("foldName", "datumList"); // Establezca el nombre de la carpeta principal FormData.append ("oderCode", selfordCode); formdata.append ("datumType", datumType); $. Ajax ({type: "post", data: formData, url: "orden/datumList/batchinsertDatumLists", contentType: falso, proceso, proceso: data, succion: stauts (stauts) (result.success) {// Borrar el contenido del archivo $ ("#FileMage"). }, error: function () {showrortoast ('¡Solicitar fallido!')}}); Hay algunas explicaciones anteriores:
1. Var formData = new FormData ($ ("#uploadform") [0]);
2. Use formdata.append ("odercode", autoordercode); Para agregar otros parámetros
Backend de Java
MultipHtttpServletRequest mrequest = (multipThttPservletRequest) solicitud; list <PolteAtfile> files = mrequest.getFiles ("fileImage");Hay algunas explicaciones anteriores:
1. Obtenga el multiprescho multiphttpServletRequest, correspondiente al nombre de la etiqueta de archivo
2. Descarga por lotes de archivos
En este proyecto, el requisito es descargar un lote de archivos. Use ZIP para comprimir el archivo en el servidor y luego descargar el archivo al cliente.
Para la consulta en línea, el uso de la clase de salida de archivo de Java no puede resolver el problema de los nombres de archivos confusos en archivos comprimidos. Solución: use el paquete Ant.jar. Al crear un archivo comprimido, puede establecer el formato de codificación del archivo y se resolverá el problema de los nombres de archivos confusos.
Parte html (se puede omitir para construir con js)
<form de formato = "uploadform" método = "post" enctype = "multipart/form-data"> <div> <input type = "hidden" name = "ordencode"/> <input type = "hidden" name = "datumType"/> <a href = "javascript: void (0);"; " rel = "nofollow externo" rel = "externo nofollow" onClick = "batchDatumListDownload ()"> Batchdown </a> </div> </form>
Parte js
// función de descarga por lotes BatchDatumListDownload () {var param = {}; param.datumType = $ ("#datumTypeq"). val (); if (param.datumType == -1) {param.datumType = null; // consulta all} param.OrderCode = SelfOrderCode; $ ("##uploadform input [name = OrderCode]"). Val (param.OrderCode); $ ("##uploadform input [name = datumType]"). val (param.datumType); var form = $ ("##uploadform") [0]; form.Action = "Order/DatumList/BatchdownloadDatumList"; form.method = "post"; form.subMit (); // Formulario Enviar}Parte de backend
public void batchdownloadDatumList (datumListVo datumListVo, httpServletResponse Respuesta) {try {// consulta lista de listas de archivos <TatumListVo> volist = datumListService.queryDatumLists (datumListVo); // Compress Lista de archivos <Sche> files = new ArrayList <> (); for (DatumListVo: Volist) {archivo archivo = nuevo archivo (vo.getDatumurl ()); files.add (archivo); } String filename = datumListVo.getOrderCode () + "_" + DatumListVo.getDatumType () + ".zip"; // Cree un archivo temporal para la descarga envasada en la cadena del lado del servidor globalUploadPath = ""; Cadena osname = system.getProperty ("OS.Name"); if (OSName.TOLOWERCase (). indexOf ("Windows")> = 0) {GlobalUploadPath = GlobalKeys.getString (GlobalKeys.Windows_UPload_Path); } else if (Osname.tolowerCase (). IndexOf ("Linux")> = 0 || Osname.tolowerCase (). IndexOf ("Mac")> = 0) {GlobalUploAdPath = GlobalKeys.getString (Global.Linux_upload_Path); } String outFilePath = GlobalUploAdPath + File.separator + FileName; Archivo archivo = nuevo archivo (outFilePath); // Archivo de salida fluye fileOutputStream outStream = new FileOutputStream (archivo); // Compress Stream ZipoutputStream ToClient = new ZipOutputStream (Outstream); // Establecer la codificación de caracteres en el archivo comprimido, de lo contrario se volverá confuso toClient.setEncoding ("GBK"); Ziputil.zipfile (archivos, toclient); tOclient.close (); Outstream.close (); Ziputil.downloadzip (archivo, respuesta); } catch (Exception e) {E.PrintStackTrace (); }}Entre ellos ziputil.java
/** * archivos en la lista de archivos comprimido * * @param archivos * @param outputStream * @throws ioexception */public static void zipfile (archivos de lista, zipoutputstream outputStream) lanza ioexception, servletException {try {int size = files.size (); // archivos en la lista comprimida para (int i = 0; i <size; i ++) {file file = (file) files.get (i); intente {zipFile (archivo, outputStream); } capt (excepción e) {continuar; }}} Catch (Exception e) {Throw E; }}/** * Escriba el archivo en el archivo zip * * @param inputfile * @param outputStream * @throws excepción */public static void zipfile (archivo inputfile, zipOutputStream outputStream) lanza ioexception, servletException {try {if (inputFile.exist FileInputStream (InputFile); BufferedInputStream BinStream = new BufferedInputStream (InSteam); Zipentry entry = new ZipEntry (inputFile.getName ()); outputStream.putNextEntry (entrada); final int max_byte = 10 * 1024 * 1024; // La transmisión máxima es de 10 m de largo StreamTotal = 0; // La capacidad de la secuencia de aceptación int streamnum = 0; // el número de transmisiones que deben separarse int lo deojebyte = 0; // El número de caracteres que quedan en el archivo byte [] inoutbyte; // La matriz de byte acepta los datos del archivo streamToTal = binstream.available (); // El número máximo de caracteres de la secuencia se obtiene a través del método disponible streamnum = (int) math.floor (streamtotal /max_byte); // El número de caracteres que quedan por separarse para obtener el archivo de transmisión Houndte = (int) streamtotal % max_byte; // Después de dividir el archivo, el número restante if (streamnum> 0) {for (int j = 0; j <streamnum; ++ j) {inoutByte = new byte [max_byte]; // Leer en la transmisión y guárdelo en la matriz de bytes binstream.read (inoutbyte, 0, max_byte); outputStream.Write (inoutbyte, 0, max_byte); // Escribe la transmisión}} // Escribir los datos de transmisión restantes inoutbyte = new byte [LeaveByte]; BinStream.read (inoutbyte, 0, LeaveByte); outputStream.Write (inoutByte); outputStream.CloseEntry (); // cierra la entrada de zip actual y posiciona la transmisión para escribir la siguiente entrada binstream.close (); // cerrar instrucción.close (); }} else {lanzar nueva servletException ("¡El archivo no existe!"); }} Catch (ioException e) {Throw E; }}/** * Descargue el archivo empaquetado * * @param archivo * @param respuesta */public static void downloadzip (archivo de archivo, respuesta httpservletreSponse) {try {// descargar el archivo como una transmisión. BufferedInputStream FIS = new BufferedInputStream (new FileInputStream (file.getPath ())); byte [] buffer = new byte [fis.available ()]; fis.read (búfer); fis.close (); // Respuesta de respuesta clara Respuesta.reset (); OutputStream TOCLENT = new BufferedOutputStream (Response.getOutputStream ()); respuesta.setContentType ("Application/Octet-stream"); respuesta.setheader ("Content-Disposition", "adjunto; filename =" + file.getName ()); tOclient.write (buffer); tOclient.flush (); tOclient.close (); file.delete (); // Eliminar el archivo del lado del servidor generado} Catch (ioException ex) {Ex.PrintStackTrace (); }} Lo anterior básicamente cumple con los requisitos para cargar y descargar archivos.
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.