Vaadin » Simple File Upload

Simple File Upload

Zuletzt geändert von XWikiGuest am 08.11.2011, 13:46

Vaadin verfügt über ein eigene Component für das Hochladen von Dateien. Im "Book of Vaadin" wird anhand eines Beispielcode1 das Handling der Komponente erklärt. Dabei werden die Dateien im Filesystem gespeichert.

Im folgenden wird ein Beispiel gezeigt welches die hochgeladene Datei satt in das Filesystem in einen ByteArrayOutputStream schreibt. Dieser kann anschließend weiter verarbeitet werden, z.B.: um die Datei in einer DB zu speichern.

Class: SimpleUploader1

In dieser Klasse wird die grafische Oberfläche für den Fileupload erstellt. Sie besteht aus einem VerticalLayout sowie der Vaadin upload component. Des weiteren erzeugen wir ein Objekt des Receiver an den der Browser die Datei übergibt. Der Receiver führt anschließend das serverseitige Handling durch. Des weiteren implementiert diese Klasse drei Listener:

  • Upload.SucceededListener: Gibt die Erfolgsmeldung nach erfolgreichem Upload aus
  • Upload.FailedListener: Wird aufgerufen falls der Upload nicht erfolgreich war.
  • Upload.FinishedListener: Wird aufgerufen sobald die Datei erfolgreich hochgeladen wurde. In unserem Fall gibt die Methode anschließend Details über die Datei aus.
public class SimpleUploader1 implements Upload.SucceededListener,Upload.FailedListener, Upload.FinishedListener {
private static final long serialVersionUID = -6465660154299202381L;
private UploadReceiver receiver;
private Upload upload;
private VerticalLayout layout;

public SimpleUploader1() {
  layout = new VerticalLayout();
  layout.setWidth("100%");
 
  receiver  = new UploadReceiver();
 
  upload = new Upload("Upload a file", receiver);
  // Listen for events regarding the success of upload.
       upload.addListener((Upload.SucceededListener) this);
        upload.addListener((Upload.FailedListener) this);
        upload.addListener((Upload.FinishedListener) this);
 
  layout.addComponent(upload);
}

public VerticalLayout create() {
 return layout;
}

public void uploadFailed(FailedEvent event) {
  layout.getApplication().getMainWindow().showNotification("Error!", "The upload has failed!", Notification.TYPE_ERROR_MESSAGE);
}

public void uploadSucceeded(SucceededEvent event) {
  layout.getApplication().getMainWindow().showNotification("Success!", "The file was successfully uploaded! Size: "+receiver.getUploadedFile().size(), Notification.TYPE_HUMANIZED_MESSAGE);
}

public void uploadFinished(FinishedEvent event) {
  System.out.println("Filename: "+receiver.getFileName());
  System.out.println("Filetyp: "+receiver.getMimeType());
  System.out.println("Size: "+receiver.getUploadedFile().size());
}
}

Class: UploadReceiver

Diese Klasse implementiert das serverseitige Handling der Datei. Im Prinzip "nimmt" die Klasse die Datei vom Browser in Empfang und ladet sie auf den Server. In diesem Fall wir die Datei in ein ByteArrayOutputStream geschrieben und kann weiter verarbeitet werden. Die Klasse hat folgende Methoden:

  • receiveUpload(String filename, String MIMEType): Diese Methode wird serverseitig während des upload Prozess angestoßen und erzeugt den ByteArrayOutputStream.
  • getFileName(): Name der Datei
  • getMimeType(): Typ der Datei, Bild, Text, Video etc.
  • getUploadedFile(): Gibt das eben hochgeladenen Bild als ByteArrayOutputStream zurück.
public class UploadReceiver implements Receiver {

private static final long serialVersionUID = -3688499851447366218L;
private String fileName;
   private String mtype;
   private ByteArrayOutputStream uploadedFile = null;

   /**
     * Callback method to begin receiving the upload.
     */

   public OutputStream receiveUpload(String filename, String MIMEType) {
    this.fileName = filename;
    this.mtype = MIMEType;
    
     uploadedFile = new ByteArrayOutputStream();
       return uploadedFile;
   }

   /**
     * Returns the filename
     * @return
     */

   public String getFileName() {
    return fileName;
   }

   /**
     * Returns the filetyp
     * @return
     */

   public String getMimeType() {
    return mtype;
   }
   
   /**
     * Returns the uploaded file as a byteArrayOutputStream
     * @return
     */

   public ByteArrayOutputStream getUploadedFile() {
    return uploadedFile;
   }
}
  1. ^ http://vaadin.com/book/-/page/components.upload.html
Tags:
Erstellt von Florian Rhomberg am 16.07.2011, 12:59

This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 3.1 - Documentation