Websphere
Commerce has a inbuilt mechanism to handle the file upload process but it has
some limitations with it.
- Whenever
a File type is present in request object, commerce ignores the rest of
parameters coming after that.
- The
inbuilt mechanism treats the file object as UploadedFile type object. This
type of object provides a limited number of options to further process the
File Objects.
To
overcome these limitation, we need to use Apache Common Fileupload features
to handle the File Upload process for Hanes.
File Upload Basic
Requirements
In
order to pass a File object in request, we need to make some changes in the
Form.
File
Upload is not supported by REST or Ajax REST Requests.Icon
Request Parsing
The
first step is to parse the request for Uploaded File Objects. And apart from
this we need to get the other parameters back to request properties, which is
not available because of the limitation of commerce.
To
achieve this, we need to have HTTPRequest object. We can get it as below:
Configuring Request
Parser
To
parse the File Objects, Apache provides ServletFileUpload
class. Before it can be used, it needs to be initialized with a DiskFileItemFactory
object. And we want to configure this factory before handing over to
ServletFileUpload class.
Icon
DiskFileItemFactory
has some internal limitation of file size available in request. If
the size exceeds, it stores the File on Disk temporarily for processing. By
default this is System Temp directory.
So
we need to provide the Temporary location where it can save the items. And
apart from that we need to set the maximum File size limit.
If
the File object in request exceeds the max size, a FileUploadException is
thrown.
Building the Request
Properties
Once
we have set everything, we need to get the FileItem from request and rebuild
the request properties as below:
Save Image
Once
we have re-built the request properties, at this time, it contains both normal
form data and File objects as well. We can proceed for saving the file.
Before
we actually save the file we need to set the file permission as below:
Ajax like File Upload
As
said above, FileUpload can not be achieved in pure Ajax way as it needs
original HTTP request object for request processing, dojo.io.iframe provides
an alternate to handle this in Ajax-Like way. To achieve this, we need to
replace the traditional form submit with dojo.io.iframe.send().
To
handle the dojo.io.iframe.send() success and error scenarios, we need to use X_MultiPartAjaxActionResponse and X_MultiPartAjaxActionErrorResponse views
respectively.
Related links
Using
Apache File Upload: Apache
File Upload
Disk
File Item: DiskFileItemFactory
Servlet
File Upload: ServletFileUpload
Multipart
Form: W3
Multipart
Ajax
like File upload using dojo.io.iframe utility : dojo
wiki, dojo
documentation
Comments
Post a Comment