Struts2.0ファイルアップロードの原理


Struts 2ファイルアップロードデフォルトでapacheを使用したファイルアップロードのパッケージをアップロードします.新しい処理アップロードのサーブレットは以下の通りです.
 
 
WebRootの下に新しいフォルダを作成します:upload、プロジェクトがサーバーに公開されたとき、サーバーの中にuploadのフォルダがあります.
web.xmlのサーブレットは次のように構成されています.
 
<servlet>
  <servlet-name>UploadServlet</servlet-name>
  <servlet-class>com.mengya.servlet.UploadServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>UploadServlet</servlet-name>
  <url-pattern>/UploadServlet</url-pattern>
 </servlet-mapping> 

 
新規JSPは以下の通りです.
 
<form action="UploadServlet" method="post" enctype="multipart/form-data">
     username:<input type="text" name="username"><br>
     password:<input type="password" name="password"><br>
     file1:<input type="file" name="file1"><br>
     file2:<input type="file" name="file2"><br>
     <input type="submit" value="  ">
    </form>

  
/**
 * 
 * @author    
 *	
 *	  apache commons-io-1.3.2.jar,commons-fileupload-1.2.1.jar         Servlet
 */
public class UploadServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/**
		 * request.getRealPath("/")                 :C:\Program Files\Apache
		 * Software Foundation\Tomcat 6.0\webapps\Struts2_9\
		 * request.getRealPath("/upload")               +      upload   
		 *  :C:\Program Files\Apache Software Foundation\Tomcat
		 * 6.0\webapps\Struts2_9\Upload
		 */
		String path = request.getRealPath("/upload");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		/**
		 * Apache                             ,              。
		 */
		/**
		 *                 。1024*1024 1M   
		 */
		factory.setSizeThreshold(1024 * 1024);
		/**
		 *                         ,                      。
		 */
		factory.setRepository(new File(path));
		/**
		 * ServletFileUpload        
		 */
		ServletFileUpload servletUpload = new ServletFileUpload(factory);
		try {
			List<FileItem> list = servletUpload.parseRequest(request);
			for (FileItem item : list) {
				/**
				 *  file  ,      
				 */
				if (item.isFormField()) {
					/**
					 *        ,            
					 */
					String name = item.getFieldName();
					/**
					 *  gbk        value ,              
					 */
					String value = item.getString("gbk");

					request.setAttribute(name, value);
				} else {
					/**
					 * file   
					 */
					/**
					 *     file   
					 */
					String name = item.getFieldName();
					/**
					 *     file           (        )
					 *               ,             ,                。
					 *  :          :C:\Documents and
					 * Settings\Administrator\  \   .txt           :   .txt
					 */
					String value = item.getName();
					/**
					 *                      ”\“ start -1
					 */
					int start = value.lastIndexOf("\\");
					String fileName = value.substring(start + 1);
					request.setAttribute(name, fileName);
					/**
					 *         
					 */
					InputStream is = item.getInputStream();
					/**
					 *          path
					 */
					File UploadFile = new File(path, fileName);
					OutputStream os = new FileOutputStream(UploadFile);

					byte[] buffer = new byte[400];
					int length = 0;
					while ((length = is.read(buffer)) > 0) {
						os.write(buffer, 0, buffer.length);
					}
					os.close();
					is.close();
					
					/**
					 *         
					 *     InputStream OutputStream  item.write(File)  
					 * item.write(UploadFile);
					 */
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		}

	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
}