Struts File Upload Example
In this tutorial you will learn how to use Struts to
write program to upload files. The interface org.apache.struts.upload.FormFile
is the heart of the struts file upload application. This interface represents a
file that has been uploaded by a client. It is the only interface or class in
upload package which is typically referenced directly by a Struts application.
Creating Form Bean
Our form bean class contains only one property theFile, which is
of type org.apache.struts.upload.FormFile. Here is the code of FormBean (StrutsUploadForm.java):
package roseindia.net;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
/**
* @author Deepak Kumar
* @Web http://www.roseindia.net
* @Email roseindia_net@yahoo.com
*/
/**
* Form bean for Struts File Upload.
*
*/
public class StrutsUploadForm extends ActionForm
{
private FormFile theFile;
/**
* @return Returns the theFile.
*/
public FormFile getTheFile() {
return theFile;
}
/**
* @param theFile The FormFile to set.
*/
public void setTheFile(FormFile theFile) {
this.theFile = theFile;
}
}
|
Creating Action Class
Our action class simply calls the getTheFile()
function on the FormBean object to retrieve the reference of the uploaded
file. Then the reference of the FormFile is used to get the uploaded file and its information. Here is the code of our action class(StrutsUploadAction.java):
package roseindia.net;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
/**
* @author Deepak Kumar
* @Web http://www.roseindia.net
* @Email roseindia_net@yahoo.com
*/
/**
* Struts File Upload Action Form.
*
*/
public class StrutsUploadAction extends Action
{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
StrutsUploadForm myForm = (StrutsUploadForm)form;
// Process the FormFile
FormFile myFile = myForm.getTheFile();
String contentType = myFile.getContentType();
String fileName = myFile.getFileName();
int fileSize = myFile.getFileSize();
byte[] fileData = myFile.getFileData();
System.out.println("contentType: " + contentType);
System.out.println("File Name: " + fileName);
System.out.println("File Size: " + fileSize);
return mapping.findForward("success");
}
}
|
Defining form Bean in struts-config.xml file
Add the following entry in the struts-config.xml file
for defining the form bean:
<form-bean
name="FileUpload"
type="roseindia.net.StrutsUploadForm"/> |
Defining Action Mapping
Add the following action mapping entry in the struts-config.xml
file:
<action
path="/FileUpload"
type="roseindia.net.StrutsUploadAction"
name="FileUpload"
scope="request"
validate="true"
input="/pages/FileUpload.jsp">
<forward name="success" path="/pages/uploadsuccess.jsp"/>
</action>
|
Developing jsp page
Code of the jsp (FileUpload.jsp) file to upload is as
follows:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html locale="true">
<head>
<title>Struts File Upload Example</title>
<html:base/>
</head>
<body bgcolor="white">
<html:form action="/FileUpload" method="post" enctype="multipart/form-data">
<table>
<tr>
<td align="center" colspan="2">
<font size="4">Please Enter the Following Details</font>
</tr>
<tr>
<td align="left" colspan="2">
<font color="red"><html:errors/></font>
</tr>
<tr>
<td align="right">
File Name
</td>
<td align="left">
<html:file property="theFile"/>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<html:submit>Upload File</html:submit>
</td>
</tr>
</table>
</html:form>
</body>
</html:html>
|
Note that we are setting the encrypt property of the
form to enctype="multipart/form-data".
code for the success page (uploadsuccess.jsp) is:
<html>
<head>
<title>Success</title>
</head>
<body>
<p align="center"><font size="5" color="#000080">File Successfully Received</font></p>
</body>
</html> |
Add the following line in the index.jsp to call the
form.
<li>
<html:link page="/pages/FileUpload.jsp">Struts File Upload</html:link>
<br>
Example shows you how to Upload File with Struts.
</li>
Building Example and Testing
To build and deploy the application go to Struts\strutstutorial
directory and type ant on the command prompt. This will deploy the application.
Open the browser and navigate to the FileUpload.jsp
page. Your browser should display the file
upload form:

|
Current Comments
131 comments so far (post your own) View All Comments Latest 10 Comments:hi,
i want code pagenation code in jsp.
Posted by Nageswara Rao on Wednesday, 04.30.08 @ 11:49am | #58192
I have a question in the above example,it doesn't mention how the browser works?
what i want to do in my app. is click on a "browse" button so it opens a browser so that i can browse my computer and select a file (i want to get the filename along with the path) how can i do that ? is there an example or an already-made tutorial ?
p.s.:i'm working on windows xp
thanks
Posted by omar on Sunday, 03.23.08 @ 17:53pm | #53941
I have a question in the above example,it doesn't mention how the browser works?
what i want to do in my app. is click on a "browse" button so it opens a browser so that i can browse my computer and select a file (i want to get the filename along with the path) how can i do that ? is there an example or an already-made tutorial ?
p.s.:i'm working on windows xp
thanks,
omar
Posted by omar on Sunday, 03.23.08 @ 17:47pm | #53940
Can anybody tell me how to set the destination path for the uploaded file?
where is the uploaded file saved?
Posted by Mrinal Shahi on Sunday, 03.2.08 @ 14:02pm | #50929
How can I achieve the same using org.apache.struts.upload.FormFile and DynaValidatorForm ?
For example, if I dont give any file name in my form (using firefox), how do I validate the values if its empty or not in the action class?
FormFile installerFile = (FormFile)theForm.get("installerFile");
This returns me empty... but validating theForm.get("installerFile") against null or "" passes thru the if block.. doesn't make sense at all :-(
FormFile installerFile = null;
if(!theForm.get("installerFile").equals("")) {
System.out.println("Inside theForm.get(installerfile) != null or empty");
installerFile = (FormFile)theForm.get("installerFile");
}
I can see the sys print... any help ?
Regards
softguy
Posted by softguy on Wednesday, 02.27.08 @ 05:31am | #50179
i want an code for an application using struts and jdbc.To enter data into the database and to retrieve
from the database.
Please do the needful
Posted by syam on Tuesday, 02.26.08 @ 22:56pm | #50161
how to write a code for downloading a file in struts format
Posted by priya on Wednesday, 01.30.08 @ 13:33pm | #46580
thanx its pretty useful!!
Posted by strutsUser on Thursday, 01.24.08 @ 12:23pm | #45988
"mthahir - I am getting an error javax.servlet.jsp.JspException: Cannot retrieve mapping for action /FileUpload"
I believe the reason you are getting the error is that you have no form set when linking directly to the jsp which causes the error since it is looking for some form input. Instead of having your index.jsp link, link directly to a jsp, have it go thru an action forward to /FileUpload.do.
This should also solve the issues with the NULL Pointer Exceptions.
Posted by shu on Thursday, 01.24.08 @ 03:51am | #45956
This is good example to start with.
I have requirement where i need to restrict the size of the file to say 500KB without uploading the complete BIG file, say 20MB. Is there any solution to this?
PS: I need this without uploading the whole file. so expecting an early response to the user that he cannot upload file size beyond 500KB.
Thanks in advance
Nissi
Posted by nissi on Wednesday, 01.23.08 @ 17:06pm | #45903