Dans la section précédente, nous avons rempli les fonctions d'ajout et de mise à jour des produits. Ces deux parties impliquent le téléchargement des images de produits, et il n'y a aucune explication détaillée. À cette fin, cet article présente la fonction de Struts2 pour implémenter le téléchargement de fichiers.
1. INSTALLATION DES FICHIERS INCAPTION
Nous devons d'abord avoir un modèle pour résumer les informations sur le fichier. Ce modèle a besoin de trois attributs: fichier, type de fichier et nom de fichier. Pour l'image que nous voulons passer, nous créons un nouveau modèle comme suit:
classe publique FileImage {fichier privé de fichier; String Private ContentType; Nom de fichier de chaîne privée; Fichier public getFile () {return fichier; } public String getContentType () {return ContentType; } public String getFileName () {return filename; } public void setupload (fichier file) {// La méthode définie ne peut pas être la même que le nom d'attribut, mais les paramètres lorsqu'ils sont passés du premier plan doivent être les mêmes que le nom de la méthode définie. C'est-à-dire que le paramètre passé au premier plan est fileMage.upload this.file = file; } public void setuploadContentType (String contentType) {this.contentType = contentType; } public void setuploadFileName (String filename) {this.filename = filename; }}De cette façon, le modèle est écrit. Étant donné que la logique du téléchargement de fichiers n'est pas unique à une seule action, nous écrivons la logique du téléchargement de fichiers dans la classe d'outils, afin que tous les appels d'action puissent être passés. Nous créons donc une nouvelle classe d'outils de téléchargement de fichiers (pour la programmation d'interface, nous extraissons également l'interface de classe d'outils):
2. Classe d'outils de téléchargement de fichiers complètes
// Interface de classe de téléchargement de fichiers interface interface publique FileUpload {// implément la fonction du téléchargement de fichiers, renvoie le nouveau nom de fichier après télécharger publique Résumé String uploadFile (fileImage FileImage); } // Fichier Téléchargement de la classe outil Implémentation spécifique @Component ("FileUpload") Classe publique FileuploadUtil implémente FileUpload {private String FilePath; @Value ("# {Prop.FilePath}") // @ valeur signifie trouver le bean avec id = "prop" dans le fichier bean.xml. Il lit le fichier de configuration des propriétés via l'annotation, puis lit la valeur de key = filepath dans le fichier de configuration correspondant public void setFilePath (String filepath) {System.out.println (filepath); this.filepath = filepath; } // 1. Obtenez l'extension Private String getFileExt (String filename) {return filenameUtils.getExtension (filename); } // 2. Générer un numéro UUID aléatoire en tant que nouveau nom de fichier Private String newFileName (String FileName) {String ext = GetFileExt (FileName); return uuid.randomuuid (). toString () + "." + ext; } // Implémentez la fonction du téléchargement de fichiers, renvoyez le nouveau nom de fichier après upload @Override public String uploadFile (fileImage FileImage) {// Obtenez le nouveau nom de fichier unique Pic = newFileName (fileImage.getFileName ()); essayez {fileUtil.copyFile (fileImage.getFile (), nouveau fichier (filepath, pic)); // Le premier paramètre est le fichier téléchargé, et le deuxième paramètre consiste à copier le fichier sur le nouveau chemin de retour PIC; } catch (exception e) {lancer une nouvelle RuntimeException (e); } enfin {fileImage.getFile (). Delete (); }}}Il y a une annotation @Value ci-dessus, qui est d'obtenir le chemin à parcourir lequel le fichier doit être stocké à partir du fichier Propriétés. Pour plus de détails, veuillez vous référer à: Spring pour obtenir des informations de fichier de configuration.
3. Inject de classes de fichiers encapsulées et classes d'outils en action
Après avoir écrit la classe d'encapsulation de fichiers et la classe d'outils de téléchargement de fichiers, nous devons injecter ces deux objets dans notre action, afin que la fonction de téléchargement de fichiers puisse être implémentée dans l'action:
@Controller ("Baseaction") @Scope ("Prototype") Classe publique BaseAction <T> étend ActionSupport implémente DequekAware, SessionAware, ApplicationAware, ModelDriven <T> {// Protected FileImage FileImage; // Télécharger le fichier outil class @Resource Protected Fileupload Fileupload; public FileImage getFileImage () {return FileImage; } public void setFileImage (FileImage FileImage) {this.fileImage = fileImage; } // omettre un autre code non pertinent ...} 4. Implémentez le téléchargement de fichiers
D'accord, nous pouvons maintenant implémenter le téléchargement de fichiers dans ProductAction. Si la classe d'outils est écrite, la quantité de code dans l'action sera très petite, ce qui est également l'avantage apporté par l'encapsulation.
@Controller ("ProductAction") @Scope ("Prototype") public Class ProductAction étend BaseAction <product> {// omettre un autre code non pertinent ... public void Save () lance l'exception {// La classe d'outils FileUpload est extraite Pic = Fileupload.uploadFila accepte directement un objet FileImage); Model.SetPic (PIC); Model.SetDate (new Date ()); System.out.println (modèle); // Les informations sur le produit sont stockées dans ProductService.save (modèle); } public void Update () {String pic = fileupload.uploadFile (fileImage); Model.SetPic (PIC); Model.SetDate (new Date ()); System.out.println (modèle); // Mettre à jour Product ProductService.update (modèle); }}De cette façon, nous terminons la fonction de téléchargement de fichiers à partir de la réception.
Adresse originale: http://blog.csdn.net/eson_15/article/details/51366384
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.