En la sección anterior, completamos las funciones de agregar y actualizar productos. Estas dos partes implican cargar imágenes del producto, y no hay una explicación detallada. Con este fin, este artículo presenta la función de Struts2 para implementar la carga de archivos.
1. Información de archivo encapsular
Primero tenemos que tener un modelo para encapsular la información del archivo. Este modelo necesita tres atributos: archivo, tipo de archivo y nombre de archivo. Para la imagen que queremos pasar, creamos un nuevo modelo de la siguiente manera:
public class FileImage {Archivo de archivo privado; Cadena privada ContentType; nombre de archivo de cadena privada; archivo público getFile () {archivo return; } public String getContentType () {return contentType; } public String getFileName () {return FileName; } public void setUpload (archivo de archivo) {// El método establecido no puede ser el mismo que el nombre del atributo, pero los parámetros cuando se pasan desde el primer plano deben ser los mismos que el nombre del método establecido. Es decir, el parámetro pasado en primer plano es fileImage.upload this.file = file; } public void setUploadContentType (String ContentType) {this.ContentType = ContentType; } public void setUploadFileName (string filename) {this.fileName = filename; }}De esta manera, el modelo está escrito. Teniendo en cuenta que la lógica de la carga de archivos no es exclusiva de una sola acción, escribimos la lógica de la carga de archivos en la clase de herramientas, para que se puedan realizar todas las llamadas de acción. Por lo tanto, creamos una nueva clase de herramienta de carga de archivos (para la programación de interfaz, también extraemos la interfaz de clase de herramienta):
2. Complete la clase de herramienta de carga de archivos
// Interfaz de clase de carga de archivos Interface pública FileUpload {// Implementar la función de la carga de archivos, devuelve el nuevo nombre de archivo después de cargar public abstract String uploadFile (fileImage fileImage); } // La clase de carga de la clase de carga de archivo implementación específica @Component ("FileUpload") clase pública FileUploadUtil implementa FileUpload {private String filePath; @Value ("#{Prop.FilePath}") //@Value significa encontrar el bean con id = "proping" en el archivo beans.xml. Se lee el archivo de configuración de propiedades a través de la anotación, y luego lee el valor de clave = filePath en el archivo de configuración correspondiente public void setFilePath (string filepath) {system.out.println (filePath); this.filepath = filepath; } // 1. Obtenga la cadena privada de extensión getFileExt (String FileName) {return FileNameUtils.getExtension (FileName); } // 2. Genere un número UUID aleatorio como el nuevo nombre de archivo String private String NewFileName (String FileName) {String ext = GetFileExt (FileName); return uuid.randomuuid (). toString () + "." + ext; } // Implementar la función de la carga de archivos, devuelva el nuevo nombre de archivo después de cargar @Override public String uploadFile (fileImage fileImage) {// Obtenga la nueva cadena de nombre de archivo único PIC = newFileName (fileImage.getFileName ()); intente {fileUtil.CopyFile (fileImage.getFile (), nuevo archivo (filePath, PIC)); // El primer parámetro es el archivo cargado, y el segundo parámetro es copiar el archivo a la nueva ruta de retorno PIC; } catch (Exception e) {Throw New RuntimeException (e); } finalmente {fileImage.getFile (). delete (); }}}Hay una anotación @Value anterior, que es obtener la ruta a la que se debe almacenar el archivo desde el archivo de propiedades. Para obtener más detalles, consulte: Spring para obtener información del archivo de configuración.
3. Inyectar clases de archivos encapsulados y clases de herramientas en acción
Después de escribir la clase de encapsulación de archivos y la clase de herramienta de carga de archivo, necesitamos inyectar estos dos objetos en nuestra acción, para que la función de carga de archivos se pueda implementar en la acción:
@Controller ("BASEACTION") @Scope ("Prototype") Public Class BasAction <T> extiende ActionSupport implementa request AWare, SessionAWare, ApplicationAWeare, ModelDriven <T> {// FileImage protegido FileImage; // Subir la clase de herramienta de archivo @Resource fileUpload fileUpload; public FileImage getFileMage () {return FileImage; } public void setFileImage (fileImage fileImage) {this.fileImage = fileImage; } // omitir otro código irrelevante ...} 4. Implementar la carga de archivos
Bien, ahora podemos implementar la carga de archivos en ProductAction. Si la clase de herramientas está escrita, la cantidad de código en la acción será muy pequeña, que también es la ventaja presentada por la encapsulación.
@Controller ("ProductAction") @Scope ("Prototype") Public ClassCactAction extiende BASEACTION <Product> {// omitir otro código irrelevante ... public void guardar () lanza la excepción {// La clase de herramienta FileUpload se extrae, el método de carga de carga acepta directamente un objeto FileImage y devuelve la nueva imagen de nombre de imagen. Model.SetPic (PIC); Model.SetDate (New Date ()); System.out.println (modelo); // La información del producto se almacena en Productservice.save (modelo); } public void Update () {String pic = fileUpload.uploadFile (fileImage); Model.SetPic (PIC); Model.SetDate (New Date ()); System.out.println (modelo); // actualizar el producto de productos de servicio.update (modelo); }}De esta manera, completamos la función de cargar archivos desde la recepción.
Dirección original: http://blog.csdn.net/eson_15/article/details/51366384
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.