Im vorherigen Abschnitt haben wir die Funktionen zum Hinzufügen und Aktualisieren von Produkten abgeschlossen. Diese beiden Teile beinhalten das Hochladen von Produktbildern, und es gibt keine detaillierte Erklärung. Zu diesem Zweck wird in diesem Artikel die Funktion von Struts2 eingeführt, um das Datei -Upload zu implementieren.
1.. Dateiinformationen verkapulieren
Zuerst müssen wir ein Modell haben, um die Dateiinformationen zu verkapulieren. Dieses Modell benötigt drei Attribute: Datei, Dateityp und Dateiname. Für das Bild, das wir passieren möchten, erstellen wir wie folgt ein neues Modell:
öffentliche Klasse FileImage {private Datei Datei; private String contentType; privater String -Dateiname; öffentliche Datei getFile () {Rückgabedatei; } public String getContentType () {return contentType; } public String getFileName () {return Dateiname; } public void setUpload (Dateidatei) {// Die festgelegte Methode kann nicht mit dem Attributnamen übereinstimmen, sondern die Parameter, wenn sie aus dem Vordergrund übergeben werden, müssen dem festgelegten Methodennamen übereinstimmen. Das im Vordergrund übergebene Parameter ist fileImage.upload this.file = Datei; } public void setUploadContentType (String contentType) {this.contentType = contentType; } public void setUploadFileName (String Dateiname) {this.FileName = Dateiname; }}Auf diese Weise ist das Modell geschrieben. Wenn man bedenkt, dass die Logik des Datei -Uploads nicht für eine einzelne Aktion eindeutig ist, schreiben wir die Logik des Datei -Uploads in die Werkzeugklasse, damit alle Aktionsaufrufe getätigt werden können. Daher erstellen wir eine neue Datei -Upload -Toolklasse (für die Interface -Programmierung extrahieren wir auch die Schnittstelle zur Werkzeugklasse):
2. Vollständige Datei -Upload -Toolklasse ausfüllen
// Datei hochladen Toolklasse Schnittstelle öffentliche Interface FileUpload {// Implementieren Sie die Funktion des Datei -Uploads, geben Sie den neuen Dateinamen nach dem Upload öffentlicher abstrakter String -UploadFile (FileImage FileImage) zurück. } // Datei -Upload -Toolklasse spezifische Implementierung @Component ("FileUpload") öffentliche KlassendateiEUploadutil implementiert FileUpload {private String filepath; @Value ("#{prop.filepath}") //@Wert bedeutet, die Bean mit id = "prop" in der bean.xml -Datei zu finden. Es liest die Eigenschaftenkonfigurationsdatei über Annotation und liest dann den Wert von Key = FilePath in der entsprechenden Konfigurationsdatei Public void setfilepath (String filepath) {System.out.println (Filepath); this.filepath = filepath; } // 1. Holen Sie sich die Erweiterung private Zeichenfolge getFileexte (String -Dateiname) {return FileNameUtils.GetExtension (Dateiname); } // 2. Generieren Sie eine zufällige UUID -Nummer als neue Dateiname private Zeichenfolge newfilename (String -Dateiname) {String ext = getFileext (Dateiname); return uuid.randomuuid (). toString () + "." + ext; } // Implementieren Sie die Funktion des Datei -Uploads, geben Sie den neuen Dateinamen nach Upload @Override public String uploadFile zurück (FileImage FileImage) {// Erhalten Sie den neuen eindeutigen Dateinamen String pic = newFileName (fileImage.getFilename ()); try {FileUtil.copyFile (fileImage.getFile (), neue Datei (Filepath, pic)); // Der erste Parameter ist die hochgeladene Datei, und der zweite Parameter besteht darin, die Datei in das neue Pfadrückgabe -Bild zu kopieren. } catch (Ausnahme e) {neue runTimeException (e) werfen; } endlich {FileImage.getFile (). Delete (); }}}Es gibt eine @Value -Annotation oben, die den Pfad erhalten soll, zu dem die Datei aus der Eigenschaftendatei gespeichert werden soll. Weitere Informationen finden Sie unter: Spring, um Konfigurationsdateisinformationen zu erhalten.
3.. Inject Inject Inject in Aktion in Aktion injiziert werden
Nach dem Schreiben der Dateikapselungsklasse und der Datei -Upload -Toolklasse müssen wir diese beiden Objekte in unsere Aktion einfügen, damit die Funktion "Datei -Upload" in der Aktion implementiert werden kann:
@Controller ("Baseaction") @Scope ("Prototyp") Basisanlagen der öffentlichen Klasse <T> Erweitert ActionSup -Geräte implements RequestAwe, SessionAware, ApplicationAware, modeldiven <T> {// Protected FileImage FileImage; // Datei -Toolklasse @Resource geschützt FileUpload FileUpload; public FileImage getFileImage () {return FileImage; } public void setFileImage (FileImage FileImage) {this.FileMage = FileImage; } // andere irrelevante Code weglassen ...} 4. Implementieren Sie das Datei -Upload
Okay, jetzt können wir das Datei -Upload in ProduktAktion implementieren. Wenn die Werkzeugklasse geschrieben ist, ist die Menge an Code in der Aktion sehr gering, was auch der von der Kapselung mitgelöste Vorteil ist.
@Controller ("productAction") @Scope ("Prototyp") ProductAction erweitert Baseaction <Produkts> {// andere irrelevante Code weglassen ... public void Save () löst Ausnahme aus. model.setpic (pic); model.setDate (neues Datum ()); System.out.println (Modell); // Produktinformationen werden in ProductService.Save (Modell) gespeichert; } public void update () {String pic = FileUpload.UploadFile (FileImage); model.setpic (pic); model.setDate (neues Datum ()); System.out.println (Modell); // Product ProductService.Update (Modell) aktualisieren; }}Auf diese Weise vervollständigen wir die Funktion des Hochladens von Dateien von der Rezeption.
Originaladresse: http://blog.csdn.net/eson_15/article/details/51366384
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.