Vaadin 7.2.2
I implemented following interfaces Upload.ProgressListener, Upload.StartedListener to handle follwing problems:
StartedListener for filter MIME types and
ProgressListener for maximum file size
The file upload works fine - but these listeners are never invoked during the upload.
Peter
class ImageUploader implements Receiver, SucceededListener, FailedListener ,ProgressListener,StartedListener {
private ByteArrayOutputStream byteOutputStream;
private SharedComponents share;
private ImageComponent imageComponent;
private String fileName;
private int dotPos;
private String fileExtension;
public ImageUploader(ImageComponent imageComponent, SharedComponents share) {
this.share = share;
this.imageComponent = imageComponent;
}
@Override
public OutputStream receiveUpload(String fileName, String mimeType) {
System.out.println("ru->"+fileName);
dotPos = fileName.lastIndexOf(".");
if (dotPos == -1) {
SharedComponents.showWarning(share.getFormatedText("uploadNoFileExt",fileName));
return null;
}
fileExtension = fileName.substring(dotPos + 1);
try {
MimeType.valueOf(fileExtension.toUpperCase());
} catch (Exception e) {
SharedComponents.showWarning(share.getFormatedText("uploadNoSupportedFileExt",fileName));
return null;
}
this.fileName = fileName;
byteOutputStream = new ByteArrayOutputStream();
return byteOutputStream;
}
@Override
public void uploadSucceeded(SucceededEvent event) {
// process image
// ...
}
@Override
public void uploadFailed(FailedEvent event) {
System.out.println("uploadFailed:"
+ event.getFilename() + " of type '"
+ event.getMIMEType() + "' failed.");
}
@Override
public void updateProgress(long readBytes, long contentLength) {
System.out.println("updateProgress->"+readBytes + " " + contentLength);
if (readBytes > ImageDropBox.FILE_SIZE_LIMIT || contentLength > ImageDropBox.FILE_SIZE_LIMIT) {
SharedComponents.showWarning(share.getFormatedText("uploadFileSizeLimit",fileName,readBytes,ImageDropBox.FILE_SIZE_LIMIT));
imageComponent.getUpload().interruptUpload();
}
}
@Override
public void uploadStarted(StartedEvent event) {
System.out.println("uploadStarte->"+event.getFilename());
}
};