Tuesday, August 6, 2013

Struts File Upload Tutorial

In this tutorial we will see how to allow the user to upload a file using Struts. In order to allow the user to upload a file, we need to set the encoding type of html:form tag to "multipart/form-data" and specify the HTTP method as "post". The html:file tag enables the user to browse and select a file.
1.<html:form action="fileUploadAction" method="post" enctype="multipart/form-data">
2.File : <html:file property="file" />
3. 
4.<html:submit />
5.</html:form>
The property file in the FileUploadForm is of type FormFile (org.apache.struts.upload.FormFile). We will check whether the file uploaded by the user satisfies the following conditions in the FileUploadForm's validate() method. 
  • Should be an Excel File.
  • File size should not exceed 20kb.
The validate() method of the FileUploadForm contains the following code.
01.public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
02.ActionErrors errors = new ActionErrors();
03.if (file.getFileSize() == 0) {
04.errors.add("file"new ActionMessage("error.file.required"));
05.else if (!file.getContentType().equals("application/vnd.ms-excel")) {
06.errors.add("file"new ActionMessage("error.file.type"));
07.}
08./**
09.* If the file size is greater than 20kb.
10.*/
11.else if (file.getFileSize() > 20480) {
12.errors.add("file"new ActionMessage("error.file.size"));
13.}
14.return errors;
15.}
The getFileSize() method returns the size of the file. The getContentType() method returns the content type of the file selected by the user.
We save the file uploaded by the user in the server. To do this we first get the file uploaded by the user using the getFile() method. The getFile() mehtod returns a FormFile object. Using the FormFile object we can get details regarding the file like file name and file data.
The FileUploadAction contains the following code.
01.public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throwsException {
02.FileUploadForm uploadForm = (FileUploadForm) form;
03.FileOutputStream outputStream = null;
04.FormFile formFile = null;
05.try {
06.formFile = uploadForm.getFile();
07.String path = getServlet().getServletContext().getRealPath("")+"/"+
08.formFile.getFileName();
09.outputStream = new FileOutputStream(new File(path));
10.outputStream.write(formFile.getFileData());
11.}
12.finally {
13.if (outputStream != null) {
14.outputStream.close();
15.}
16.}
17.uploadForm.setMessage("The file "+formFile.getFileName()+" is uploaded successfully.");
18.return mapping.findForward(SUCCESS);
19.}
The getFileData() method returns the entire file as a byte[]. This method should be used only when the file size is small, incase of large files its better to use getInputStream() method.
On executing the example the following page will be displayed to the user.

When the user submits the form without selecting any file the following message is dispalyed to the user.

When the user selects a file other than an Excel file then the following message is dispalyed to the user.

When the user selects a file that is greater than 20kb then the following message is dispalyed to the user.

When the user selects an excel file that is less than 20kb, then the user is forwarded to the success page.


  • Download the example and copy it inside the webapps directory of the Tomcat sever.
  • Run the example using the following url "http://localhost:8080/Example23/".
  • Select an excel file to upload.
  • The excel file will be saved inside the Example directory in the server.
  • For example, when I uploaded the temp.xls file the file got stored in the following location "C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\Example23\temp.xls".

No comments:

Post a Comment