Date: 2004-10-04T16:14:21
   Editor: NiallPemberton <[EMAIL PROTECTED]>
   Wiki: Apache Struts Wiki
   Page: StrutsFileUpload
   URL: http://wiki.apache.org/struts/StrutsFileUpload

   no comment

New Page:

= File Upload - Simple Example =

== HTML ==

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>
}}}

== JSP ==

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>
}}}


== ActionForm ==

The ActionForm needs a property of type FormFile.

=== Regular ActionForms ===

{{{
    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;
       }
    }
}}}

=== Dyna ActionForms ===

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>
}}}

== Whats Needed in the Action ==

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();
        ... 
    }
}}}

= File Upload Configuration =

The following parameters can be set in the <controller> element of the 
struts-config.xml to configure file upload:

 * '''bufferSize''' - The size (in bytes) of the input buffer used when processing 
file uploads. Default is 4096.
 * '''maxFileSize''' - The maximum size (in bytes) of a file to be accepted as a file 
upload. Can be expressed as a number followed by a "K", "M", or "G", which are 
interpreted to mean kilobytes, megabytes, or gigabytes, respectively. Default is 250M.
 * '''multipartClass''' - The fully qualified Java class name of the multipart request 
handler class to be used with this module. Defaults is 
org.apache.struts.upload.CommonsMultipartRequestHandler. 
 * '''tempDir''' - Temporary working directory to use when processing file uploads.

Above taken from the Configuration section in the 
[http://struts.apache.org/userGuide/configuration.html User Guide].

= Plugging in an Alternative File Upload Mechanism =

By default Struts uses Commons [http://jakarta.apache.org/commons/fileupload/ 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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to