
<< View previous version | view page history | view next version >>
Incremental Upload Processing Using FileEntryCallback
The all-new ACE FileEntry component introduces in-memory file processing. This feature is designed to provide for anti-virus scanning, validity checks or a scenario where the upload doesn't need to be saved to disk, and doing so immediately is excessive IO.
The component requires that a listener bean, implementing FileEntryCallback, be created to handle the incrementally uploaded bytes. The methods that instances of FileEntryCallback must implement are:
/* Notification for upload handler when a file begins uploading. * fileInfo - information known about the file, before downloading the contents */ public void begin(FileEntryResults.FileInfo fileInfo); /* We're working with chunks of bytes, as we read them in... */ public void write(byte[] buffer, int offset, int length); /* We work with bytes, as we read them in... */ public void write(int data); /* Notification for upload handler the file is finished uploading. * * Should we decide to invalidate an upload, perhaps it's over quota, then this method * must handle the case. This method may massage the result (raising some * prompts and accepting upload), or possibly fail the upload for good by calling * FileInfo.updateStatus(FileEntryStatus, boolean status) on its FileInfo input. * fileInfo - The same object that was passed into begin(FileInfo) */ public void end(FileEntryResults.FileInfo fileInfo);
This example demos in-memory processing to provide an MD5 hash for 3 files, and demo a toy example of file handling for the 4th.
There are no images attached to this page. |
Implementing FileEntryCallback
- Check fileInfo.getStatus() to determine if the file has pre-failed
- uploading, due to too many files uploaded, an invalid file extension,
- or content type.
Creating our handler is the most important step of this tutorial. Everything else is just wiring up the dependencies.
The Class Properties
FileEntryMD5Callback.javapublic void begin(FileEntryResults.FileInfo fileInfo) {}
The write Methods
FileEntryMD5Callback.javapublic void write(byte[] buffer, int offset, int length) {} public void write(int data) {}
The end Method
FileEntryMD5Callback.java// Some comments here public void end(FileEntryResults.FileInfo fileInfo) {}
Adding the FileEntry Component to a Facelet Page
Adding the "Quota Exceeded" Dialog to a Facelet Page
That concludes this overview of the new in-memory processing feature. If you're interested in further details of how this example works, take a look at the complete source code below; or sign up for ICEfaces training for a complete guide to this example and every feature of ICEfaces!