Este artículo compara dos ejemplos de carga de archivos para ayudar a todos a aprender mejor la función de carga de archivos Java. El contenido específico es el siguiente
1. Código de carga de archivos adjuntos de Java
@ControllerPublic Class uploadFile extiende BaseJSONController {/** * ACTUALMENTE DE ACTUALIZACIÓN * * @param request * @param CreativeFile * @param Respuesta * @Return */@RequestMapping (valor = "/requestsEdfile.json") Public Void iftpSetRetEnserveTRETRETRETRETRETRETRETRETRETRESTRETRETRETRETRETRETRETRETRETRETRETRETRETRETRETRETRETEA 1. Para garantizar la seguridad del servidor, el archivo cargado debe colocarse en un directorio al que el mundo exterior no pueda acceder directamente a la que no puede acceder directamente, como en el directorio web-INF. * 2. Para evitar la sobrescritura del archivo, se debe generar un nombre de archivo único para cargar el archivo. * 3. Para evitar que aparezcan demasiados archivos en un directorio, debe usar el algoritmo hash para romper el almacenamiento. * 4. El valor máximo de los archivos cargados debe limitarse. * 5. Para limitar el tipo de archivos cargados, al recibir el nombre de archivo cargado, determine si el nombre del sufijo es legal. */// Obtenga el directorio de guardado de archivo cargado, almacene el archivo cargado en el directorio web-INF y no permita el acceso directo desde el mundo exterior para garantizar la seguridad de los archivos cargados String SavePath = request.getSession (). GetServletContext (). GetReAlpath ("/web-Inf/Suparload"); // El directorio de guardado de archivo temporal generado durante la cadena de carga temppath = request.getSession (). GetServletContext (). GetRealPath ("/Web-Inf/Temp"); Archivo tmpfile = nuevo archivo (TEMPPATH); if (! tmpfile.exists ()) {// Crear un directorio temporal tmpfile.mkdirs (); } // El mensaje solicita JSONArray arr = new JsonArray (); Map <string, object> map = null; InputStream in = null; FileOutputStream out = null; Pruebe {// use el componente de carga del archivo Apache para manejar los pasos de carga de archivo: // 1. Cree una fábrica de fábrica de Factory de DISKFILETMATIVORY // Establecer el tamaño del búfer de la fábrica. Cuando el tamaño de archivo cargado excede el tamaño del búfer, se generará y almacenará un archivo temporal en el directorio temporal especificado. Factory.setsizethreshold (1024*100); // Establezca el tamaño del búfer en 100kb. Si no se especifica, el tamaño del búfer es de 10 kB de forma predeterminada. // Establecer el directorio de almacenamiento del archivo temporal generado durante la carga fábrica.setRepository (tmpfile); // 2. Crear un archivo de carga analizador ServletFileUpload upload = new ServletFileUpload (fábrica); // Suguer la carga de la carga de archivo upload.setProgressListener (new ProgressListener () {public void Update (Long pbytesread, long pContentLength, int arg2) {system.out.println ("El tamaño del archivo es:" + pcontentLength + ", actualmente procesado:" + pbytesread);}); // Resolver la carga china Garlume. // 3. Determine si los datos enviados son los datos del formulario de carga si (! ServletFileUpload.IsmultipartContent (request)) {// Obtenga retorno de datos de acuerdo con la forma tradicional; } // Establezca el tamaño máximo del archivo único cargado, que actualmente está configurado en 1024*1024 bytes, es decir, 20mb upload.setFilesizEmax (1024*1024*20); // Establezca el valor máximo del número total de archivos cargados. El valor máximo = la suma de los tamaños máximos de múltiples archivos cargados al mismo tiempo. Actualmente está configurado en 40mb upload.setSizEmax (1024*1024*40); // 4. Use el analizador ServletFileUpload para analizar los datos cargados. El resultado de análisis devuelve una recopilación de la lista <FileItem>. Cada FileItem corresponde al elemento de entrada de un formulario de formulario @SupplesSwarnings ("sin verificar") Lista <LeItem> list = upload.parsequest (solicitud); for (fileItem item: list) {// Si los datos de los elementos de entrada ordinarios se encapsulan en el fileitem if (item.isformfield ()) {String name = item.getFieldName (); // Resolver el problema chino de datos de los elementos de entrada ordinarios Valor de cadena = item.getString ("UTF-8"); // value = new String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (nombre + "=" + valor); } else {// Si el elemento del archivo está encapsulado en el archivo cargado // obtener el nombre del archivo cargado, string filename = item.getName (); if (filename == null || filename.trim (). Equals ("")) {continuar; } // Nota: Los nombres de archivo enviados por diferentes navegadores son diferentes. Algunos navegadores envían nombres de archivo con rutas, como: c: /a/b/1.txt, mientras que algunos son solo nombres de archivo simples, como: 1.txt // Process la parte de ruta del nombre de archivo del archivo cargado obtenido, solo la parte del nombre de archivo está retenido FileName = filename.substring (FileName.lastIndexof ("//")+1); // Obtenga la extensión de la cadena de archivo cargado FileExtName = FileName.Substring (FileName.lastIndexOf (".")+1); // Si necesita limitar el tipo de archivo cargado, puede usar la extensión del archivo para determinar si el tipo de archivo cargado es legal if (stringUtils.equals (fileExtName, "rar") || stringUtils.equals (fileExtName, "zip")) {tirar nueva bizexception ("" "," Se prohíben los archivos compresados! ");"); ");"); ");"); ");"); ");"); ");"); ");"); ");"); ");"); } /**************** /// Obtenga la secuencia de entrada del archivo cargado en el elemento = item.getInputStream (); /********************/// Obtenga el nombre de la cadena guardada de archivo SaveFileName = MakefileName (FileName); // Obtener la cadena de directorio de guardar archivo realSavePath = MakEpath (SaveFileName, SavePath); // Crear un archivo de salida de archivo Out = New FileOutputStream (RealSavePath + "//" + SaveFileName); // Crear un búfer de byte búfer [] = nuevo byte [1024]; // La identificación de si se han leído los datos en el flujo de entrada es int len = 0; // El bucle lee la secuencia de entrada en el búfer, (len = in.read (buffer))> 0 significa que todavía hay datos en while ((len = in.read (buffer))> 0) {// use fileoutputstream salta stream para escribir los datos de búfer en el directorio especificado (guardarpath + "//" "FileName) out.write (buffer, 0, len); } // Cierre la transmisión de la transmisión en.close (); // cierre la salida stream out.close (); // Eliminar el archivo temporal generado al procesar el archivo de carga item.delete (); map = new HashMap <String, Object> (); map.put ("saveFileName", saveFileName); map.put ("RealSavePath", RealSavePath); arr.add (mapa); }} returnuccessjson ("uploadBase.filesizeLImitexExEdEdException e) {E.PrintStackTRace (); returnfailJson (e.getMessage ()," un solo archivo excede el valor máximo del valor); returnfailjson (e.getMessage (), "El tamaño total del archivo cargado excede el límite máximo!!", Respuesta); in.close (); / /cierre la salida stream out.close (); @return uuid + "_" + el nombre original del archivo */private string makefileName (string filename) {//2.jpg // para evitar la sobrescribir el archivo, se debe generar un nombre de archivo único para cargar el archivo return uuid.randomuuid (). toString () + "_" + filename; } / ** * Para evitar que aparezcan demasiados archivos en un directorio, debe usar el algoritmo hash para romper el almacenamiento * @method: makepath * @Description: * @anthor: xuwentao * * @param nombre de archivo de archivo, generar directorio de almacenamiento basado en el nombre de archivo * @param savePath de almacenamiento de almacenamiento * @return new storage directorio directorio directorio directorio directorio streing fileMe, string fileMe, string, string fileMat, string, string fileMat, string fileMat, string, string fileMat, string fileMat, string fileMat (string fileMe, string fileMe, string fileMat, string, string fileMat, string fileMat. SavePath) {// Obtenga el valor de hashcode del nombre del archivo, y lo que obtiene es la dirección del nombre de archivo del objeto de cadena en la memoria int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15 int dir2 = (hashcode & 0xf0) >> 4; // 0-15 // Construye una nueva cadena de directorio de guardado dir = SavePath + "//" + Dir1 + "//" + Dir2; // cargar/2/3 de carga/3/5 // El archivo puede representar archivos y directorios archivo archivo = nuevo archivo (dir); // Si el directorio no existe si (! File.exists ()) {// crea el directorio file.mkdirs (); } return dir; }}2. Código de currículum de carga de Java
/ ***Currículum de carga*Falló la creación de 1 archivo 2-Exception 3-Supload Falling 4-File no obtenido 5-File No se elimina 6 Word de carga por favor, Excel, ppt, PDF archivos*///*separador de ruta: utilizado en el sistema de operación adaptativo*/ privado static file_separator = system.getProperty () .getProperty ("File de operación adaptativa*); / ** * Subir archivo * * @param fileio * @param OldContracturl * @param request * @return La dirección del archivo (dirección relativa, dirección no absolute) */ @Override public String upload (multipartfile fileio, string OldContractUrl, httpservletrequest solicitud) {string string uploadUrl = request.getSession (). GetServletContext (). GetRealPath ("archivos"); // Eliminar archivos y carpetas if (OldContractUrl! = NULL) {String OldDirectory = OldContractUrl.Substring (5, OldContractUrl.lastIndexOf (file_separator)); Archivo archivo = nuevo archivo (uploadUrl + OldDirectory); Boolean Flag = Deletedir (archivo); if (! flag) {logger.error ("falló la eliminación de archivos antiguos"); regresar "5"; }} // cargar un nuevo archivo de currículum larga ahora = system.currentTimemillis (); uploadUrl = uploadUrl + file_separator + ahora + file_separator; String reumeName = ""; if (! fileio.isEmpty ()) {reumeName = stringUtils.deletewhiteSpace (fileio.getOriginalFileName ()); // juzga el sufix de archivo/*String sufix = resumename.substring (resumeName.lastIndexOf ("."), ReuMeName.length ()) .tolowercase (); if (! ". doc" .equals (sufix) &&! ". docx" .equals (sufix) &&! ". xlsx" .equals (sufix) &&! ". Xlsx" .equals (sufix) &&! ". ppt" .equals (sufix) &&! ",. pptx",. logger.error ("no word, Excel, ppt, archivos pdf"); regresar "6"; }*/} else {logger.error ("archivo no obtenido"); regresar "4"; } Archivo dir = nuevo archivo (uploadUrl); if (! dir.exists ()) {dir.mkdirs (); } Archivo TargetFile = nuevo archivo (uploadUrl + reumeName); if (! TargetFile.Exists ()) {try {TargetFile.CreateNewFile (); } catch (ioException e) {logger.error ("Falling de creación de archivos", e); regresar "1"; }} try {FileIO.Transferto (TargetFile); } catch (ilegalStateException e) {logger.error ("excepción de oración", e); regresar "2"; } catch (ioException e) {logger.error ("cargar fallido", e); regresar "3"; } return file_separator + "archivos" + file_separator + ahora + file_separator + reumeName; } /*** Elimine recursivamente todos los archivos en el directorio y todos los archivos en los subdirectorios* @param dirigir el directorio de archivos que se eliminará* @return boolean devuelve "verdadero" si todas las deleciones fueron exitosas. * Si falla una eliminación, el método deja de intentar * eliminar y devuelve "falso". */ public Boolean Deletedir (File Dir) {if (dir.ISDirectory ()) {String [] children = dir.list (); // Elimine recursivamente los subdirectorios en el directorio para (int i = 0; i <children.length; i ++) {boolean éxito = deletedir (nuevo archivo (dir, niños [i])); if (! Success) {return false; }}} // El directorio está vacío en este momento, puede eliminar return dir.delete (); }Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y dominar las habilidades de cargar archivos Java.