This isn't specific to Struts, but gives a simple example of the HTML required to upload a single file.
Two things are needed in the html page. Firstly, the form needs to specify an enctype of multipart/form-data and secondly an <input> form control of type file.
<form name="myForm" method="post" action="/mywebapp/uploadMyFile.do" enctype="multipart/form-data">
Select File: <input type="file" name="myFile"> </br>
<input type="submit" value="Upload File">
</form>
|
The above HTML can be generated using the Struts tags in the following way
<html:form action="/uploadMyFile.do" enctype="multipart/form-data">
Select File: <html:file property="myFile"/> <br/>
<html:submit value="Upload File"/>
</html:form>
|
The ActionForm needs a property of type FormFile.
import org.apache.struts.upload.FormFile;
public class MyActionForm extends ActionForm {
private FormFile myFile;
public void setMyFile(FormFile myFile) {
this.myFile = myFile;
}
public FormFile getMyFile() {
return myFile;
}
}
|
In the struts-config.xml
<form-bean name="myForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="myFile" type="org.apache.struts.upload.FormFile"/>
</form-bean>
|
Nothing special really, just retrieve the FormFile from the ActionForm, as you would any other property, and process it as you like. You can get the file name, size and file contents from the FormFile.
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
MyActionForm myForm = (MyActionForm)form;
// Process the FormFile
FormFile myFile = myForm.getMyFile();
String contentType = myFile.getContentType();
String fileName = myFile.getFileName();
int fileSize = myFile.getFileSize();
byte[] fileData = myFile.getFileData();
...
}
|
The following parameters can be set in the <controller> element of the struts-config.xml to configure file upload:
Above taken from the Configuration section in the User Guide.
By default Struts uses Commons File Upload.
Alternative implementations can be plugged as long as they implement the org.apache.struts.upload.MultipartRequestHandler interface and Struts configured to use that implementation by specifying it in the multipartClass parameter in the <controller> element of the struts-config.xml
Fair Warning: The MultipartRequestHandler interface is almost certain to change in a Struts 1.3 or higher release.