KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > filters > upload > FileUploadFilter


1 /*
2 * @author : Reghu
3 * @Version : 1.0
4 *
5 * Development Environment : Oracle9i JDeveloper
6 * Name of the File : FileUploadFilter.java
7 * Creation/Modification History :
8 *
9 * Reghu 21-Jan-2002 Created
10 *
11 */

12 package filters.upload;
13
14 // Java IO classes
15
import java.io.IOException JavaDoc;
16 import java.io.File JavaDoc;
17
18 // Servlet related classes
19
import javax.servlet.ServletException JavaDoc;
20 import javax.servlet.ServletRequest JavaDoc;
21 import javax.servlet.http.HttpServletRequest JavaDoc;
22 import javax.servlet.ServletResponse JavaDoc;
23
24 // Servlet Filter classes
25
import javax.servlet.Filter JavaDoc;
26 import javax.servlet.FilterChain JavaDoc;
27 import javax.servlet.FilterConfig JavaDoc;
28
29 /**
30  * This class is implemented as a Servlet Filter class to upload files to server
31  * The filter detects multipart form data requests and uploads any file to an
32  * upload directory. The upload directory is specified relative the webapp root
33  * in web.xml as an init param to the filter
34  */

35 public final class FileUploadFilter implements Filter JavaDoc {
36
37   // Absolute path to the upload directort
38
private String JavaDoc uploadDir = null;
39
40   
41   /**
42    * This method is called by the server before the filter goes into service,
43    * and here it determines the file upload directory.
44    * @param <b>config</b> The filter config passed by the servlet engine
45    * @throws <b>ServletException</b>
46    */

47   public void init( FilterConfig JavaDoc config )
48               throws ServletException JavaDoc {
49               
50     // If upload directory parameter is null, assign a temp directory
51
if( uploadDir == null ) {
52       File JavaDoc tempdir = (File JavaDoc)config.getServletContext().
53                                 getAttribute( "javax.servlet.context.tempdir" );
54       if( tempdir != null ) {
55         uploadDir = tempdir.toString();
56       } else {
57         throw new ServletException JavaDoc( "Error in FileUploadFilter : No upload "+
58                                     "directory found: set an uploadDir init "+
59                                     "parameter or ensure the " +
60                                     "javax.servlet.context.tempdir directory "+
61                                     "is valid" );
62       }
63     }
64   }
65
66   /**
67    * This method performs the actual filtering work .In its doFilter() method,
68    * each filter receives the current request and response, as well as a
69    * FilterChain containing the filters that still must be processed. Here
70    * the doFilter() method examines the request content type, and if it is a
71    * multipart/form-data request, wraps the request with a FileUpload class.
72    * @param <b> request </b> The servlet request
73    * @param <b> response </b> The servlet response
74    * @param <b> chain </b> Object representing the chain of all filters
75    * @throws <b>ServletException</b>
76    * @throws <b>IOException</b>
77    */

78   public void doFilter( ServletRequest JavaDoc request,
79                         ServletResponse JavaDoc response,
80                         FilterChain JavaDoc chain )
81                         throws IOException JavaDoc,ServletException JavaDoc {
82                         
83     HttpServletRequest JavaDoc req = (HttpServletRequest JavaDoc)request;
84     
85     // Get the content type from the request
86
String JavaDoc content = req.getHeader( "Content-Type" );
87     
88     // If the content type is not a multipart/form-data , continue
89
if( content == null || !content.startsWith( "multipart/form-data" ) ) {
90       chain.doFilter( request, response );
91     } else {
92       FileUploadWrapper load = new FileUploadWrapper( req, uploadDir );
93       chain.doFilter( load, response );
94     }
95   }
96
97   /**
98    * This method is called Called after the filter has been taken
99    * out of service.
100    */

101   public void destroy() {
102   }
103 }
104
Popular Tags