La carga de archivos Java y la descarga de archivos son funciones relativamente comunes en el desarrollo del programa. El siguiente artículo le presentará tres soluciones para implementar la carga y descarga de archivos en Java. Los detalles específicos son los siguientes;
El primer punto: el código Java implementa la carga de archivo
Formfile file = ManForm.getFile (); String newFileName = null; String newPathName = null; string fileadDre = "/numup"; try {inputStream stream = file.getInputStream (); // lea el archivo en string filePath = request.getRealPath (fileadDre); // fetch la ruta actual del archivo del sistema 1 = nuevo archivo (filePath); // add la función de la función de la función automáticamente automáticamente) file1) .mkdir (); newFileName = System.CurrentTimEmillis ()+ file.getFileName (). Substring (file.getFileName (). LastIndexOf ('.')); ByteArRayOutputStream Baos = new ByTearRayOutputPutPutSeam (); OutputStream Bos = newOutputStream (filePath+ "/"+ "+"+ "+"+ "+"+ "+"+ "+"+ "+"+ "+" newFileName); newPathName = FilePath+"/"+newFileName; System.out.println (newPathName); // Cree una transmisión de salida para cargar archivos System.out.println (filePath+"/"+file.getFileName ()); int bytesRead = 0; byte [] buffer = newte byte [8192]; while (((bytesread = stream.read (buffer, 0, 8192))! = -1) {bos.write (buffer, 0, bytesread); // escriba el archivo en el servidor} bos.close (); stream.close ();} capt (filenotfoundexception e) {e.printstackTrace ();} capt (ioexception e) {E.PrintStackTrace ();}El segundo punto: implementar la carga de archivo en la página JSP
paquete com.vogoal.util; import java.io.bufferedOutputStream; import java.io.file; import java.io.fileOutputStream; import java.io.ioException; import java.text.simpledateFormat; import java.util.arraylist; import java.util.date; import javaShtatil.utilable; import; javax.servlet.servletInputStream; import javax.servlet.http.httpservletRequest; public class jspFileUpload {/** Solicitud de solicitud*/private httpservletRequest request = null;/** ruta para cargar el archivo*/private uploadpath = null;/** El tamaño de bytes es obtenido cada tiempo*/privado. BufSize = 1024*8;/** Hashtable que almacena parámetros*/private hashtable paramht = new HaspTable ();/** ArrayList que almacena el nombre de archivo del archivo cargado*/private ArrayList updFileRr = new ArrayList ();/*** Establezca el objeto de solicitud. ** @param solicitud* httpservletRequest Soly Object*/public void setRequest (solicitud httpservletrequest) {this.request = request;}/*** Establezca la ruta de carga de archivos. * * @param ruta * La ruta de carga del archivo especificado por el usuario. */public void setUploadPath (ruta de cadena) {this.uploadPath = path;}/*** El programa principal para el procesamiento de carga de archivos. �����B * * @return int Operation Result 0 La operación del archivo fue exitosa; 1 Solicitud de objeto no existe. 2 La ruta de guardar archivo no está configurada o la ruta de guardado de archivos es incorrecta; 3* La enchia correcta no está establecida; 4 La operación del archivo es anormal. */public int Process () {int status = 0; // Antes de cargar el archivo, verifique el objeto de solicitud, cargar ruta y enctype. status = Precheck (); // Devuelve el código de error cuando ocurre un error. if (status! = 0) return status; intente {// �� parámetro o nombre de archivo �U��String name = null; // parámetro valuestring value = null; // Si la transmisión de lectura es el bit de archivo boolean fileflag = false; // archivo para almacenarse. Archivo tmpfile = null; // El nombre de la cadena de archivo cargado fname = null; fileOutputStream baos = null; bufferedOutputStream bos = null; // ��hashtableParamht = new Hashtable (); updFilearr = new ArrayList (); int rtnpos = 0; byte [] buffs = newtable = newtable �get ContentTyPestring ContentType = request.getContentType (); int index = contentType.indexof ("boundary ="); string boundary = "-" + contentType.substring (index + 9); string endBoundary = boundary + "-"; // � obtenga la secuencia del objeto de solicitud. ServLetInputStream sis = request.getInputStream (); // Read 1 línea while ((rtnPos = sis.readline (buffs, 0, buffs.length))! = -1) {string strbuff = new String (buffs, 0, rtnpos); // leer 1 línea de datos�n��if (strbuff.startswith (límite)) {si (nombre! name.trim (). longitud ()> 0) {if (fileFlag) {bos.flush (); baos.close (); bos.close (); baos = null; bos = null; updfileARR.Add (fname);} else {obje obj = paramht.get (name); arraylist al = new ArrayList (); {al = (ArrayList) obj;} al.add (valor); system.out.println (valor); paramht.put (name, al);}} name = new String (); valor = new String (); fileFlag = false; fname = new String (); rtnPos = sis.Re.Readline (Buffs, 0, buffs.length); if (((RTNAME; {strbuff = new String (Buffs, 0, rtnPos); if (strbuff.tolowerCase (). startswith ("content-disisposition: form-data;"))) {int nindex = strbuff.tolower (). indexOf ("name =/" "); int nLastIndex = strbuff.tolowercase (). Index ("/"", name = name = name = name = name = name = name = name strbuff.substring (nindex + 6, nLastIndex);} int findEx = strbuff.tOlowastCase (). indexOf ("filename =/" "); if (findex! = -1) {fileFlag = true; int flastindex = strbuff.tolowercaseCase (). indexOf ("/", findEx + 10); fname = strbuff.exsubSting (findEncase (). indexOf ("/"", findEx + 10); fname = strbuff.ExsubSting (findEncase (). índ flastindex); fname = getFileName (fname); if (fname == null || fName.trim().length() == 0) {fileFlag = false;sis.readLine(buffs, 0, buffs.length);sis.readLine(buffs, 0, buffs.length);sis.readLine(buffs, 0, buffs.length);continue;}else{fName = getFileNameByTime(fName);sis.readLine(buffs, 0, buffs.length); sis.readline (buffs, 0, buffs.length);}}}} else if (strbuff.startswith (endBoundary)) {if (name! = null && name.trim (). longitud ()> 0) {if (fileFlag) {bos.flush (); baos.close (); bos.cloose (); null; updFileArr.add (fname);} else {object obj = paramht.get (name); arrayList al = new ArrayList (); if (obj! = Null) {al = (arrayList) obj;} al.add (valor); paramht.put (name, al);}}}}} {if ((file && bos == null) {tmpFile = new File(uploadPath + fName);baos = new FileOutputStream(tmpFile);bos = new BufferedOutputStream(baos);}bos.write(buffs, 0, rtnPos);baos.flush();} else {System.out.println("test :" + value + "--" + strbuff); valor = valor + strbuff;}}}} catch (ioexception e) {status = 4;} return status;} private int precheck () {int errcode = 0; if (request == null) return 1; if (uploadpath == null || uploadPath.trim (). longitud () == 0) return 2; else {file tmpf = new File (uploadPath); if (! tmpf.exists ()) return 2;} string contentType = request.getContentType (); if (contentType.IndexOf ("multipart/formy -data") == -1) return 3; return 3; regreshcode;} nombre) {String value = ""; if (name == null || name.trim (). longitud () == 0) return value; value = (paramht.get (name) == null)? "" :( string) ((arrayList) paramht.get (name)). get (0); Valor de retorno;} public String [] GetParameters (String Name) {if (name == name.trim (). longitud () == 0) return null; if (paramht.get (name) == null) return null; arrayList al = (arrayList) paramht.get (name); string [] strarr = new String [string [al.size ()]; for (int i = 0; i <al.size (); i ++) strarr [i] = (string) al.get (i); int getUpDFilesize () {return UpdFileArr.Size ();} public String [] getUpDFileNames () {String [] strarr = new String [updFileARR.Size ()]; for (int i = 0; i <updfilearr.size (); i ++) strarr [i] = ((string) updfileR.get (i); return strarr;} strar getFileName (String input) {int FindEx = input.lastIndexof ("//"); if (findEx == -1) {findEx = input.lastIndexof ("/"); if (findEx == -1) {return input;}} input.subString (findex + 1); return input; input.IndexOf ("."); fecha dt = new Date (); SimpleDateFormat sdf = new SimpleDateFormat ("yyyymmddhhmmssssss"); return input.substring (0, index) + sdf.format (dt) + input.substring (índice);}}2. Referencia a la clase Java en la página JSP:
<%@page import = "com.vogoal.util.jspfileUpload"%> <%// inicialize jspFileUpload jfu = new jspFileUpload (); // Establezca el objeto de solicitud jfu.setRequest (request); // Establezca la ruta de archivo cargada Jfu.setuploadPath jfu.process (); // Obtenga los valores de otros parámetros de control de entrada en la cadena de formato UserName = jfu.getParameter ("username"); // Si hay múltiples controles de entrada para el mismo parámetro, devuelve la cadena de matriz [] usernamearr = jfu.getParamETERS ("username"); // obtiene el nombre de la cadena de archivos al revés [] filearr = jfu.getUpdFileNames (); // Obtenga el número de archivos cargados, este método es un poco inútil int fileNumber = jfu.getUpdFilesize (); // La siguiente es la salida de código para la prueba. // out.println ("parámetro:" + nombre de usuario); // out.println ("tamaño de parámetro:" + usernamearr.length); // out.println ("size filearr:" + fileARR.length); // if (filearr.length> 0) // out.println ("filearr 0:"El tercer punto: Struts2 implementa la carga y descarga del archivo
Paso 1: Agregue Commons-FileUpload-1.2.1.jar y commons-io-1.3.2.jar en Web-INF/lib. Estos dos archivos se pueden descargar desde http://commons.apache.org/.
Paso 2: Establezca el enctype de la tabla de formulario en: "multipart/data", como sigue:
Código Java
public class iploadAction {private archivo uploadImage; // archivo privado cadena uploadIloadImageContentType; // Tipo de archivo Private String uploDIloDImageFileName; // Nombre de archivo String private String BookName; // Nombre del libro String privado Cadena Autor; // Autor Private String Save SavePath; // Guardar la ubicación // Atributo Getter/Setter Method Public String upload () Excepción de excepción {// Implementar código de carga, I/O Operación de archivo Deturns Revuelve "uploadSuccessing"; }}Nota: El dominio del archivo en un formulario corresponde a tres propiedades en la acción, a saber, el nombre del archivo y el tipo de archivo. El nombre es fijo. El nombre del archivo debe ser el mismo que el nombre del dominio del archivo en el formulario (uploadImage). El nombre del archivo es: archivo + nombre de archivo y tipo de archivo: archivo + contentType.
Paso 4: Configure nuestra acción de carga en Struts.xml.
Código Java
<Action name = "upload"> <param name = "savePath">/uploadfile </amam> <resultado> /success.jsp </ resultado> </action>
NOTA: Para especificar el directorio Guardar del archivo cargado en el servidor, debe definir la variable SavePath en la carga de carga y agregar los métodos Setter y Getter correspondientes, de modo que Struts2 pueda asignar el valor /uploadFile al atributo SavePath, es decir, para usar la variable SavePath en la carga, debe definirlo en la carga.
Tipo de filtrado de archivo de configuración manual
<Param name = "IloodTypes"> Image/Bmp, Image/Png, Image/Gif, Image/Jpeg </amam>
Límite de tamaño del archivo de configuración manual
<param name = "MaximumSize"> 1048576 </marc>
Use el interceptor de carga de archivos de Struts2 para implementar el filtrado de archivos
Struts2 proporciona un interceptor de carga de archivo - FileUpload. Al configurar este interceptor, el filtrado de archivos cargados se puede lograr fácilmente.
Al configurar un Interceptor FileUpload, puede especificar dos parámetros para él:
Types permitidos: Especifica el tipo de archivo que se permite cargar, separado por una coma de inglés (,).
Máximo de control: Especifica el tamaño del archivo que se puede cargar en bytes.
Consejo: al configurar un Interceptor FileUpload, puede implementar fácilmente el filtrado de archivos. Cuando el filtrado de archivo falla, el sistema se transferirá automáticamente a la vista lógica de entrada. Por lo tanto, la vista lógica llamada entrada debe configurarse para la acción. Además, la referencia del interceptor de defaultStack debe configurarse para la acción.
Use el interceptor de Struts2 para implementar la configuración de filtrado de archivos de la siguiente manera:
<action name="uploadFileAction"> <interceptor-ref name="defaultStack"> <!-- Configure the file type allowed to be uploaded, separated by multiple using ","--> <param name="fileUpload.allowedTypes"> image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg </param> < </acción>
Cuando el usuario no se carga, hay un cierto mensaje de inmediato. En Struts2, use la etiqueta <S: Fielderror/> para emitir el mensaje de error a la página.
Nota: Si desea utilizar la información de solicitud de error Struts2, la clase de acción que carga el archivo debe heredar ActionSupport; de lo contrario, Struts2 no proporcionará la función de información de solicitud de error de salida.
Podemos configurar archivos de recursos (.properties) para guardar la salida de información al usuario.
struts.messages.eror.file.too.large: cuando el tamaño del archivo de carga excede el valor establecido, Struts2 generará la información de solicitud correspondiente a la clave.
struts.messages.error.content.type.not.lodwed: cuando el tipo de archivo cargado no cumple con el valor establecido, Struts2 generará la información de solicitud correspondiente a la clave.
struts.messages.error.uploading: Cuando ocurre un error desconocido al cargar un archivo, Struts2 generará la información de solicitud correspondiente a la clave.
También necesitamos configurar el archivo de recursos en el archivo Struts.xml. A continuación, tenemos que ver nuestro archivo de recursos. Ya contiene chino. Tenemos que convertirlo y luego configurarlo en el proyecto.
Establezca el archivo de recursos en struts.xml:
<constant name = "struts.custom.i18n.resources" valor = "mensajes"/> o <constant name = "struts.custom.i18n.resources" valor = "mensajes_zh_cn"/>
Use el comando national2ascii d: /Messages.Properties D: /Messages_ZH_CN.Properties para convertir el archivo de recursos original en los compatibles.
Nota: Mantener internacional, el sufijo de nombre del archivo de recursos es: *_ZH_CN + Extensión del archivo.
El principio de cargar múltiples archivos es el mismo que el anterior, pero debe tenerse en cuenta que los nombres de los atributos del nombre de múltiples campos de archivos deben ser los mismos, y en acción, archivo [] o lista <sche> debe usarse para recibirlo.
Personalmente, creo que usar este método para cargar múltiples archivos no es
muy bien.
Struts2 para la descarga de archivos
Struts2 proporciona un tipo de resultado de transmisión, que se usa específicamente para admitir la descarga de archivos. Al especificar el tipo de resultado de transmisión, se debe configurar un parámetro InputName, que especifica una transmisión de entrada, que es la entrada al archivo descargado (es decir, el archivo se puede descargar en una transmisión a través de esta entrada).
Implementar la acción de la descarga de archivos
Public Class FiltownloadAction implementa Action {// Este valor de propiedad se especifica en el archivo de configuración. Struts2 inyectará automáticamente (es decir, asignar un valor). Debe proporcionar el setter y getter métodos privados entradas inputPath; // Especifique la ruta completa del archivo que se descargará (nombre de ruta + nombre del archivo)/ * * La clase de acción que implementa la descarga debe proporcionar un método para devolver una instancia de InputStream. El valor de la propiedad de nombre de entrada correspondiente en <resultado ... // publicstream getTargetFile () lanza la excepción {return servletActionContext.getServletContext (). GetResourCeasstream (inputPath); } // El método de ejecución que maneja las solicitudes de usuario, que devuelve la cadena de éxito de éxito ejecute ejecute () lanza la excepción {return "éxito"; }}La configuración de acción correspondiente en el archivo Struts.xml
<Action name = "download"> <!-Especifique la ubicación del recurso descargado-> <param name = "inputPath">/uploadfile/damo.txt </amamr> <!-Configure el tipo de resultado como flujo-> <resultado name = "exitoso" type = "stream"> <!-Especifique el tipo de archivo del archivo del archivo-> <param name = "contentype"> <////! Archivo-> <param name = "inputName"> TargetFile </param> <!-Especifique el método de descarga del archivo descargado y el nombre del archivo guardado en el momento de la descarga. El nombre del archivo al guardar el archivo debe tener una extensión, y la extensión indica el icono del tipo de descarga-> <param name = "contentDisposition"> adjunta; filename = struts2.txt </param> <!-Especifique el tamaño de búfer del archivo descargado-> <param name = "buffersize"> 4096 </amamr> </sult> </acción>
Las anteriores son las tres soluciones para implementar la carga y descarga de archivos en Java presentadas por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!