GWT - Widget FileUpload

introduction

le FileUploadwidget enveloppe l'élément HTML <input type = 'file'>. Ce widget doit être utilisé avec FormPanel s'il doit être soumis à un serveur.

Déclaration de classe

Voici la déclaration pour com.google.gwt.user.client.ui.FileUpload classe -

public class FileUpload 
   extends Widget
      implements HasName, HasChangeHandlers

Règles de style CSS

Les règles de style CSS par défaut suivantes seront appliquées à tous les widgets TextBox. Vous pouvez le remplacer selon vos besoins.

.gwt-FileUpload {}

Constructeurs de classe

N ° Sr. Constructeur et description
1

FileUpload()

Construit un nouveau widget de téléchargement de fichiers.

2

FileUpload(Element element)

Ce constructeur peut être utilisé par des sous-classes pour utiliser explicitement un élément existant.

Méthodes de classe

N ° Sr. Nom et description de la fonction
1

HandlerRegistration addChangeHandler(ChangeHandler handler)

Ajoute un gestionnaire ChangeEvent.

2

java.lang.String getFilename()

Obtient le nom de fichier sélectionné par l'utilisateur.

3

java.lang.String getName()

Obtient le nom du widget.

4

boolean isEnabled()

Obtient si ce widget est activé.

5

void onBrowserEvent(Event event)

Lancé chaque fois qu'un événement de navigateur est reçu.

6

void setEnabled(boolean enabled)

Définit si ce widget est activé.

sept

void setName(java.lang.String name)

Définit le nom du widget.

8

static FileUpload wrap(Element element)

Crée un widget FileUpload qui encapsule un élément <input type = 'file'> existant.

Méthodes héritées

Cette classe hérite des méthodes des classes suivantes -

  • com.google.gwt.user.client.ui.UIObject

  • com.google.gwt.user.client.ui.Widget

  • java.lang.Object

Exemple de widget FileUpload

Cet exemple vous guidera à travers des étapes simples pour montrer l'utilisation d'un widget FileUpload dans GWT. Suivez les étapes suivantes pour mettre à jour l'application GWT que nous avons créée dans GWT - Chapitre Créer une application -

Étape La description
1 Créez un projet avec un nom HelloWorld sous un package com.tutorialspoint comme expliqué dans le chapitre GWT - Créer une application .
2 Modifiez HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html et HelloWorld.java comme expliqué ci-dessous. Gardez le reste des fichiers inchangé.
3 Compilez et exécutez l'application pour vérifier le résultat de la logique implémentée.

Voici le contenu du descripteur de module modifié src/com.tutorialspoint/HelloWorld.gwt.xml.

<?xml version = "1.0" encoding = "UTF-8"?>
<module rename-to = 'helloworld'>
   <!-- Inherit the core Web Toolkit stuff.                        -->
   <inherits name = 'com.google.gwt.user.User'/>

   <!-- Inherit the default GWT style sheet.                       -->
   <inherits name = 'com.google.gwt.user.theme.clean.Clean'/>

   <!-- Specify the app entry point class.                         -->
   <entry-point class = 'com.tutorialspoint.client.HelloWorld'/>

   <!-- Specify the paths for translatable code                    -->
   <source path = 'client'/>
   <source path = 'shared'/>

</module>

Voici le contenu du fichier de feuille de style modifié war/HelloWorld.css.

body {
   text-align: center;
   font-family: verdana, sans-serif;
}

h1 {
   font-size: 2em;
   font-weight: bold;
   color: #777777;
   margin: 40px 0px 70px;
   text-align: center;
}

.gwt-FileUpload {
   color: green; 
}

Voici le contenu du fichier hôte HTML modifié war/HelloWorld.html.

<html>
   <head>
      <title>Hello World</title>
      <link rel = "stylesheet" href = "HelloWorld.css"/>
      <script language = "javascript" src = "helloworld/helloworld.nocache.js">
      </script>
   </head>

   <body>
      <h1>FileUpload Widget Demonstration</h1>
      <div id = "gwtContainer"></div>
   </body>
</html>

Laissez-nous avoir le contenu suivant du fichier Java src/com.tutorialspoint/HelloWorld.java qui illustrera l'utilisation du widget FileUpload.

package com.tutorialspoint.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

public class HelloWorld implements EntryPoint {
   public void onModuleLoad() {
      VerticalPanel panel = new VerticalPanel();
      //create a FormPanel 
      final FormPanel form = new FormPanel();
      //create a file upload widget
      final FileUpload fileUpload = new FileUpload();
      //create labels
      Label selectLabel = new Label("Select a file:");
      //create upload button
      Button uploadButton = new Button("Upload File");
      //pass action to the form to point to service handling file 
      //receiving operation.
      form.setAction("http://www.tutorialspoint.com/gwt/myFormHandler");
      // set form to use the POST method, and multipart MIME encoding.
      form.setEncoding(FormPanel.ENCODING_MULTIPART);
      form.setMethod(FormPanel.METHOD_POST);
    
      //add a label
      panel.add(selectLabel);
      //add fileUpload widget
      panel.add(fileUpload);
      //add a button to upload the file
      panel.add(uploadButton);
      uploadButton.addClickHandler(new ClickHandler() {
         @Override
         public void onClick(ClickEvent event) {
            //get the filename to be uploaded
            String filename = fileUpload.getFilename();
            if (filename.length() == 0) {
               Window.alert("No File Specified!");
            } else {
               //submit the form
               form.submit();			          
            }				
         }
      });
   
      form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
         @Override
         public void onSubmitComplete(SubmitCompleteEvent event) {
            // When the form submission is successfully completed, this 
            //event is fired. Assuming the service returned a response 
            //of type text/html, we can get the result text here 
            Window.alert(event.getResults());				
         }
      });
      panel.setSpacing(10);
	  
      // Add form to the root panel.      
      form.add(panel);      

      RootPanel.get("gwtContainer").add(form);
   }	
}

Une fois que vous êtes prêt avec tous les changements effectués, laissez-nous compiler et exécuter l'application en mode développement comme nous l'avons fait dans le chapitre GWT - Créer une application . Si tout va bien avec votre application, cela produira le résultat suivant -

Voici l'extrait de code de la page du serveur Java montrant la capacité côté serveur pour le téléchargement de fichiers. Nous utilisons les bibliothèques Common IO et Commons FileUpload pour ajouter une capacité de téléchargement de fichiers à la page côté serveur. Le fichier sera téléchargé dans le dossier uploadFiles par rapport à l'emplacement où upload.jsp se trouve côté serveur.

<%@page import = "org.apache.commons.fileupload.FileItemFactory"%>
<%@page import = "org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import = "org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import = "org.apache.commons.fileupload.FileItem"%>
<%@page import = "org.apache.commons.io.FilenameUtils"%>
<%@page import = "java.util.List"%>
<%@page import = "java.util.Iterator"%>
<%@page import = "java.io.File"%>
<%@page import = "java.io.FileOutputStream"%>
<%@page import = "java.io.InputStream"%>

<%
   // Create a factory for disk-based file items
   FileItemFactory factory = new DiskFileItemFactory();
   // Create a new file upload handler
   ServletFileUpload upload = new ServletFileUpload(factory);
   try {
      // Parse the request
         List items = upload.parseRequest(request); 

      // Process the uploaded items
         Iterator iter = items.iterator();

      while (iter.hasNext()) {
         FileItem item = (FileItem) iter.next();
      
         //handling a normal form-field
         if(item.isFormField()) {
            System.out.println("Got a form field");
            String name = item.getFieldName();
            String value = item.getString();
            System.out.print("Name:"+name+",Value:"+value);				
         
         } else { 
            
            //handling file loads
            System.out.println("Not form field");
            String fieldName = item.getFieldName();
            String fileName = item.getName();
            if (fileName != null) {
               fileName = FilenameUtils.getName(fileName);
            }
            
            String contentType = item.getContentType();
            boolean isInMemory = item.isInMemory();
            long sizeInBytes = item.getSize();
            System.out.print("Field Name:"+fieldName +",File Name:"+fileName);
            System.out.print("Content Type:"+contentType
               +",Is In Memory:"+isInMemory+",Size:"+sizeInBytes);			 
            
            byte[] data = item.get();
            fileName = getServletContext()
               .getRealPath( "/uploadedFiles/" + fileName);
            System.out.print("File name:" +fileName);			
            FileOutputStream fileOutSt = new FileOutputStream(fileName);
            fileOutSt.write(data);
            fileOutSt.close();
            out.print("File Uploaded Successfully!");
         }	
      }
   } catch(Exception e){
      out.print("File Uploading Failed!" + e.getMessage());
   }   
%>