servlet+jspで実装されたファイルアップロード

2724 ワード

まずjspページを2つ、uploadを1つ書きます.jspはクライアントが発行するフォームを記述するために使用され、1つはresultである.jspはユーザに結果を出力し,サーバ側プログラムserveltを記述するためにdoPostメソッドを書き換えるだけでよい.
    upload.jsp
 
<body>
<form action="/MyStructs2/UploadServlet" type="post" 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="submit">
 </form>
 </body>

    result.jsp
<body>
     username:${requestScope.username}<br>
     password:${requestScope.password }<br>
      file1:  ${requestScope.file1}<br>
      file2:${requestScope.file2 }<br>
</body>

   UploadServlet.java
    DiskFileItemFactory factory=new DiskFileItemFactory();
           String path=request.getRealPath("/upload");
           factory.setRepository(new File(path));
           factory.setSizeThreshold(1024*1024);
           ServletFileUpload upload=new ServletFileUpload(factory);
         
         try {
			List<FileItem> list=upload.parseRequest(request);
			for(FileItem item:list)
			{
				if(item.isFormField())//        
				{
					String name=item.getFieldName();
					String value=item.getString();
					request.setAttribute(name, value);
					
				}
				else//       
				{
					String name=item.getFieldName();//      
					String value=item.getName();//       
					int start=value.lastIndexOf("\\");
					String fileName=value.substring(start+1);	//wenjianming 
					request.setAttribute(name, fileName);					
					OutputStream os=new FileOutputStream(new File(path,fileName));
					InputStream is=item.getInputStream();
					byte[] buffer=new byte[400];
					int length=0;
					while((length=is.read(buffer))>0)
					{
						
						os.write(buffer,0,length);
					}
					os.close();
				    is.close();
				}
				
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
                              request.getRequestDispatcher("upload/result.jsp").forward(request,response);//