En general, hay dos formas de cargar imágenes. Una es escribir el archivo de imagen en la base de datos, y el otro es almacenarlo en el directorio de archivos del servidor. Los archivos de imagen escritos en la base de datos deben convertirse en un formato de flujo binario, ocupar espacio de la base de datos y son adecuados para el almacenamiento de una pequeña cantidad de imágenes. Por ejemplo, algunos pequeños iconos en el sistema tienen la ventaja de escribir en la base de datos de que son relativamente seguros y que los usuarios no eliminan fácilmente accidentalmente.
Si almacena una gran cantidad de imágenes, generalmente se hace para guardarlas en una carpeta en el servidor. Hay muchas formas de completar la carga, puede usar el método de transmisión y el método FTP, y el método FileUpload se utiliza aquí.
Con diferentes tamaños del sistema, los métodos de procesamiento de los archivos de imagen también son diferentes. Si el número de imágenes en el sistema no es grande, solo almacene todas las imágenes en el mismo directorio. Si las imágenes se acumulan más, puede clasificar y almacenar las imágenes de acuerdo con la clasificación de material, lo que ahorrará algo de tiempo en la búsqueda de archivos en el disco.
Al cargar imágenes en los archivos, puede cargar imágenes directamente en el directorio, también puede escribir el nombre del archivo de imagen y la ruta del archivo a la base de datos, o puede crear dinámicamente rutas de archivos en el programa. Si la compañía requiere que las imágenes se almacenen en un servidor especial, es más apropiado escribir la ruta del archivo en el archivo completo. En general, es más fácil procesar si un material (material) corresponde a una imagen. Si corresponde a múltiples imágenes, debe usarse junto con Recycle. Por un lado, es necesario procesar la visualización dinámica de la imagen, y por otro lado, es necesario verificar si el nombre del archivo de la imagen está duplicado. Además, al procesar imágenes (cargar, eliminar y modificar), debe cooperar con transacciones.
La siguiente es una introducción clave a la implementación más básica del uso de FileUpload para lograr la carga de imagen.
1. Use etiquetas de archivo en la parte delantera:
<input name = "filename" type = "file" class = "text1" size = "40" maxLength = "40">
2. Establezca el formato Enctype del archivo: Data multipart/formulario
<form de nombre = "itemform" target = "_ self" id = "itemform" método = "post" action = "servlet/item/fileUploadservlet" enctype = "multipart/form-data">
Instrucciones sobre enctype = "multipart/formy-data":
Si este formato se usa en JSP, el servlet correspondiente no puede usar request.getParameter () para obtener parámetros. Debe usar el método Parserequest del objeto ServletFileUpload para analizar primero los datos en el objeto de solicitud, y luego usar el indicador ISFormfield del elemento analizado y cooperar con el método GetFieldName para obtener los datos.
3. Implementación de FileUploadServlet:
paquete com.bjpowernode.drp.basedata.web; import java.io.file; import java.io.ioException; import java.util.iterator; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; importar org.apache.commons.fileUpload.fileitem; importar org.apache.commons.fileupload.disk.diskfileitemFactory; importar org.apache.commons.fileUpload.servlet.servletFileUpload; import com.bjpowernode.drp.baseddata.manager.itemmanager; import com.bjpowernode.drp.baseddata.manager.itemmanagerImpl; import com.bjpowernode.drp.util.applicationException; Public Class FileUploadServlet extiende AbstractItemServlet {private File uploadPath; Archivo privado TEMPPATH; @Override public void init () lanza ServletException {// Cuando se inicia el sistema, inicie la inicialización. Durante la inicialización, verifique si la carpeta donde se carga la imagen y la carpeta donde se almacenan los archivos temporales. Si no existe, cree // Obtenga la ruta física real correspondiente al directorio root uploadPath = nuevo archivo (getServletContext (). GetRealPath ("cargar")); System.out.println ("uploadPath ====" + uploadPath); // Si el directorio no existe si (! UploadPath.Exists ()) {// crea el directorio uploadPath.mkdir (); } // directorio temporal // archivo tempfile = new File (item.getName ()) Construya el objeto temporal temppath = nuevo archivo (getServletContext (). GetRealPath ("temp")); if (! Temppath.exists ()) {temppath.mkdir (); } // Si no se muestra el método de la clase principal, no habrá instancia de elementos manager, lo que causará un puntero nulo super.init (); } public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, httpservletResponse respuesta) lanza ServletException, ioexception {// obtiene datos de item_upload.jsp, porque el formato de codificación de la página cargada es diferente de la general, utilizando enchype = "multipart/formy-data" req.getParameter () // string itemno = req.getParameter ("itemno"); //System.out.println("iTemno======== " + itemno); /******************************************** Use el componente FileUpload para realizar el formulario *******************************//DiskFileItemFactory: cree una fábrica para el objeto FileItem. En esta clase de fábrica, puede configurar el tamaño del búfer de memoria y el directorio donde se almacenan los archivos temporales. DiskFileItemFactory fábrica = new DiskFileItemFactory (); // tamaño máximo que se almacenará en la fábrica de memoria. // La ubicación para guardar datos que son más grandes que getSizethReshold () factory.setRepository (TEMPPATH); // ServletFileUpload: responsable de procesar datos de archivo cargados y encapsular cada parte de los datos en un objeto FileItem. // Al recibir datos de archivo cargados, el contenido se guardará en el caché de memoria. Si el contenido del archivo excede el tamaño del búfer especificado por DiskFileItemFactory, // el archivo se guardará en el disco y se almacenará como un archivo temporal en el directorio especificado de DiskFileItemFactory. // Después de que se reciben los datos del archivo, ServLetUpload escribe los datos del archivo en el archivo en el directorio de archivo cargado ServletFileUpload upload = new ServletFileUpload (fábrica); // El tamaño máximo antes de que un archivoUploadException se lanzará andaad.setsizeMax (1000000 * 20); / *********************** Los datos aprobados por el formulario y devuelven la lista Tipo de datos de recopilación de recopilación: FileItem *****************/ Try {List FileItems = upload.parserequest (request); Cadena itemno = ""; // iterator iter = fileItems.Iterator () tome su iterador //iter.hasnext () verifique si hay elementos en la secuencia para (iterator iterater = fileItems.iterator (); iter.hasnext ();) {// Obtenga el siguiente elemento en la secuencia fileitem item = (fileitem) iter.next (); // juzga si es información de archivo o texto // es un campo de entrada de formulario ordinario if (item.isformfield ()) {if ("itemno" .equals (item.getFieldName ())) {itemno = item.getString (); }} // El campo de entrada es if (! Item.isformfield ()) {// El nombre y la ruta completa del archivo cargado String filename = item.getName (); tamaño largo = item.getSize (); // Determinar si el archivo está seleccionado si ((filename == null || filename.equals ("")) && size == 0) {continuar; } // interceptar la cadena como: c: /windows/debug/passwd.log filename = filename.substring (filename.lastindexof ("//") + 1, filename.length ()); // Guarde el archivo en el disco físico del servidor: el primer parámetro es: la ruta completa (excluyendo el nombre del archivo). El segundo parámetro es: nombre de archivo //item.write(file); // modifica el nombre del archivo y el nombre del material es el mismo, y la extensión del archivo se ve obligada a ser gif //item.write(new archivo (uploadPath, itemno + ".gif")); // Guardar el archivo en el directorio sin modificar el nombre del archivo item.write (nuevo archivo (uploadPath, filename)); // Escriba el nombre del archivo de imagen en la base de datos ElementManager.uploadeMimage (itemnoNo, nombre de archivo); }} respuesta.sendedirect (request.getContextPath () + "/servlet/item/searchitemservlet"); } catch (Exception e) {E.PrintStackTrace (); tirar nueva ApplicationException ("¡Sube fallido!"); }}} Esta clase hereda el AbstractItemservlet: la clase madre abstracta de todos los servlets de material, responsable de instanciar el mermel
/** * La clase principal abstracta de todos los servlets de material es responsable de instanciar itemManager * @author Limin * */public abstract Class AbstractItemServlet extiende httpservlet {// Aunque no es a prueba de hilo, si es de lectura, no habrá errores protegidos itemManager itemManager = null; @Override public void init () lanza ServletException {itemManager = new itemManagerImpl ()}}ItemManagerImpl es una subclase que implementa la interfaz itemManager. Hay un problema con este modelo de diseño, que tiene optimización salarial, pero aquí no haremos ningún comentario irrelevante para explicar la carga de imágenes.
Resumir:
Acerca del método de inicialización init ():
Cuando se inicializa el servlet, el directorio se crea dinámicamente. Aquí hay una carga y un archivo temporal TEMPPATH para el proyecto y el directorio bajo las aplicaciones web de Tomcat.
Vale la pena señalar que el método super.init () debe llamarse aquí (Super no es una referencia al objeto de clase principal, pero es responsable de la llamada al método de la clase principal), de lo contrario, puede causar un puntero nulo a la clase.
La carga se realiza aproximadamente en tres pasos: use el componente FileUpload para analizar el formulario; Analice los datos aprobados por el formulario y devuelva el tipo de datos de recopilación de la lista: FileItem; Finalmente cargue la imagen.
Use el método isFormfield () de FileItem para determinar si es un texto normal o un archivo;
Use FileItem.Write (nuevo archivo (uploadPath, nombre de archivo)) para cargar el archivo. El primer parámetro es: la ruta completa (excluyendo el nombre del archivo). El segundo parámetro es: el nombre del archivo;
Procesamiento de datos de texto normales:
if ("itemno" .equals (item.getFieldName ())) {itemno = item.getString (); }La carga es una tecnología relativamente madura durante muchos años, y hay muchos empaquetados que podemos usar directamente en nuestros proyectos diarios, pero es esencial comprender algunos principios básicos.
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.