Struts file upload example

In this tutorial, you will learn how to upload a file to the server file system with Struts <html:file> tag.

Download this Struts file upload example – Struts-FileUpload-Example.zip

1. Action Form

In Action form, create a org.apache.struts.upload.FormFile variable to hold the uploaded file, and also the form validation for the uploaded file.


package com.mkyong.common.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;

public class FileUploadForm extends ActionForm{
	
	private FormFile file;
	
	public FormFile getFile() {
		return file;
	}

	public void setFile(FormFile file) {
		this.file = file;
	}

	@Override
	public ActionErrors validate(ActionMapping mapping,
	   HttpServletRequest request) {
		
	    ActionErrors errors = new ActionErrors();
	      
	    if( getFile().getFileSize()== 0){
	       errors.add("common.file.err",
	    	new ActionMessage("error.common.file.required"));
	       return errors;
	    }
	    
	    //only allow textfile to upload
	    if(!"text/plain".equals(getFile().getContentType())){
	        errors.add("common.file.err.ext",
	    	 new ActionMessage("error.common.file.textfile.only"));
	        return errors;
	    }
	    
            //file size cant larger than 10kb
	    System.out.println(getFile().getFileSize());
	    if(getFile().getFileSize() > 10240){ //10kb
	       errors.add("common.file.err.size",
		    new ActionMessage("error.common.file.size.limit", 10240));
	       return errors;
	    }
	      
	    return errors;
	}
}

2. Action

In Action class, just get the uploaded file and save it into the server file system, and store the newly created file details into a session for later use.


package com.mkyong.common.action;

import java.io.File;
import java.io.FileOutputStream;

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;

import com.mkyong.common.form.FileUploadForm;

public class FileUploadAction extends Action{
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
	    HttpServletRequest request, HttpServletResponse response)
	    throws Exception {
		
	    FileUploadForm fileUploadForm = (FileUploadForm)form;
		
	    FormFile file = fileUploadForm.getFile();
		
	    //Get the servers upload directory real path name
	    String filePath = 
               getServlet().getServletContext().getRealPath("/") +"upload";
	    
	    //create the upload folder if not exists
	    File folder = new File(filePath);
	    if(!folder.exists()){
	    	folder.mkdir();
	    }
	    
	    String fileName = file.getFileName();
	    
	    if(!("").equals(fileName)){  
	    	
	        System.out.println("Server path:" +filePath);
	        File newFile = new File(filePath, fileName);
              
	        if(!newFile.exists()){
	          FileOutputStream fos = new FileOutputStream(newFile);
	          fos.write(file.getFileData());
	          fos.flush();
	          fos.close();
	        }  
	        
	        request.setAttribute("uploadedFilePath",newFile.getAbsoluteFile());
	        request.setAttribute("uploadedFileName",newFile.getName());
	    }
		return mapping.findForward("success");
	}
}

3. JSP

You have to set the encoding type of <html:form> tag to “multipart/form-data” and specify the HTTP method as “post“.

fileupload.jsp

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>






:

display.jsp






	File uploaded to : <%= request.getAttribute("uploadedFilePath") %>
	

"> Click here to download it

4. struts-config.xml

Link all together


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>

	<form-beans>
		<form-bean
			name="fileUploadForm"
			type="com.mkyong.common.form.FileUploadForm"/>
	
	</form-beans>

	<action-mappings>
	
		<action
			path="/UploadPage"
			type="org.apache.struts.actions.ForwardAction"
			parameter="/pages/fileupload.jsp"/>
		
		<action
			path="/Upload"
			type="com.mkyong.common.action.FileUploadAction"
			name="fileUploadForm"
			validate="true"
			input="/pages/fileupload.jsp"
			>
			<forward name="success" path="/pages/display.jsp"/>
		</action>
		
	</action-mappings>

	<message-resources
		parameter="com.mkyong.common.properties.Common" />

</struts-config>

Test it

http://localhost:8080/StrutsExample/UploadPage.do
Select a file and click on the submit button.

Struts-file-upload-example1

http://localhost:8080/StrutsExample/Upload.do
It will forward to display.jsp and display the uploaded file details.

Struts-file-upload-example2

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
boss
Guest
boss

no program is running what the f*** you are doing there.

Mary
Guest
Mary

Muy bien hecho, llevaba dias buscando un ejemplo concreto, ademas es muy facil y practico, muchas gracias

vitaly
Guest
vitaly

Hi,
There is an issue with html:file tag – it returns to server lowercased filename and i cant find how to pass real file name. Could you help me, please?

Ino
Guest
Ino

Hi,
I used tag and it works fine. But the Text box is not displayed in Firefox or Chrome. It displayed in IE. I need to display that textbox in Firefox also.

Pls. help.

foo
Guest
foo

Dear Mkyong, the Common.properties config file is missing

vignesh
Guest
vignesh

Thanks buddy

Jeevan
Guest
Jeevan

How to use file upload plugins with struts1

boss
Guest
boss

give the programs in runnable format. Other pls don’t post your program for the sake of prove your brilliant intelligent.

boss
Guest
boss

vendru

boss
Guest
boss

nee waste da

Kiran
Guest
Kiran

But, on click of Browse button i want to open my own folder from PC on popup wondow to select a file. How can achieve this ?. As I know by default on click of ‘Browse’ button, then popup wondow takes to ‘My Documents’ folder or Previously what we choosen folder. But I want open specific folder(I provide the PATH, that PATH should be opned on popup wondow).

Bhupender
Guest
Bhupender

I am using this code but it showing “argument type mismatch – had objects of type “java.lang.String” but expected signature “org.apache.struts.upload.FormFile”

so plz can you tell me how to reslove it

Satish Kumar
Guest
Satish Kumar

Hi,

In this concept i have to store uploading file from one computer to another computer. can u please help any body………………

Sathish………..

SweetFlow
Guest
SweetFlow

I am working on breakPoint upload,so I want to know how can I do this.when I use struts2 and fileupload,I encounter some problems.So I hope you can give me e road that I can finish my work.
Thanks in advance,

trackback
Struts 2 upload multiple files example

[…] http://www.mkyong.com/struts/struts-file-upload-example/ This article is under – Struts 2.x Tutorials , Tags : file upload struts2 mkyong Founder and Chief Editor of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. […]

Swathi
Guest
Swathi

Hi ,
I need small help i uploded an image file in the jsp and my req is in need to display this image file in the jsp using struts….

can anyone help me out ASAP….

Thanks in advance,

Swathi

rakesh
Guest
rakesh

Thanks Mkyong

Kane
Guest
Kane

Hi,
my service is in struts , JSP . The problem encountered is enctype=”multipart/form-data , seem to cause the object data which is set through request.setAttribute and passed through each Action class, is getting lost. Ultimately , not able to access request.getAttribute(..) .

ANy suggestions on how to handle this.

Allyson Ota
Guest
Allyson Ota

Hi there, just became aware of your blog through Google, and found that it’s really informative. You can also share it at filebrid. I am going to watch out for brussels. I’ll be grateful if you continue this in future. Numerous people will be benefited from your writing. Cheers!

trackback
Struts 2 file upload example
trackback
Struts Tutorials | Tutorials

[…] File upload example Struts <html:file> file upload example. […]

onyou
Guest
onyou

very clear and simple. you just made my day – thanks!