Commons FileUpload

スポンサーリンク
FileUpload – Home

FileUpload 1.3 で動作を確認してみました.

pom.xml

    <dependency>
    	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>1.3</version>
    </dependency>

サーブレット

doPost() の部分のみ.

public class Uploader extends HttpServlet{
	
	// commons-fileupload を使用するにあたり,参考になった情報.
	// http://www.javaroad.jp/servletjsp/sj_servlet12.htm
	// http://www.ne.jp/asahi/hishidama/home/tech/apache/commons/fileup.html
	// http://www.atmarkit.co.jp/fjava/javatips/106jakarta018.html
	
	private static final String FILE_SEPARATOR = System.getProperty("file.separator");
	private static final String LINE_SEPARATOR = System.lineSeparator();
		
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response){
		System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
		
		// そもそもリクエストがマルチパートなのか否かを確認します.
		if(ServletFileUpload.isMultipartContent(request)){
			
			// ファクトリーを作成します.
			DiskFileItemFactory factory = new DiskFileItemFactory();
			// バッファサイズを設定します.
			factory.setSizeThreshold(4096);
			///factory.setRepository(new File("/tmp/temporary_for_uploader"));
			
			// ServletFileUpload を作成します.
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 単一のアップロード,全体のアップロードに対して制限を掛けます.
			upload.setFileSizeMax(10 * 1024 * 1024); // 10MB
			upload.setSizeMax(10 * 1024 * 1024);     // 10MB
			upload.setHeaderEncoding("UTF-8");
			
			try {
				
				// アップロードされたファイルの情報を
				// FileItem のリストとして取得します.
				List list = upload.parseRequest(request);
				
				// アップロードファイルを格納するパスを設定します.
				String outputPath = new File("/tmp").toString();

				// アップロードされたファイルをクライアントから見える場所に置きたい場合
				//String outputPath = getServletContext().getRealPath("files");
				// .../src/main/webapp/files
				
				// リスト化された FileItem を順次処理します.
				for(Object obj : list){
					
					FileItem item = (FileItem)obj;
					
					if(item.isFormField()){
						//
					}else{
						// type="file"
						// ファイルデータの場合.
						
						// ファイルデータのファイル名 (パス含む)
						String fileName = item.getName();
						
						if((fileName != null) && (!fileName.equals(""))){
							
							// ファイル名のみを抽出します.
							fileName = new File(fileName).getName();
							
							// ファイルデータを指定されたパス + ファイル名で書き出します.
							item.write(new File(outputPath + FILE_SEPARATOR + fileName));
						}
						
					} // if(item.isFormField())
					
				} // for 
				
			} catch (FileUploadException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}else{
			//
		} // if(ServletFileUpload.isMultipartContent(request))
		
		try {
			response.sendRedirect("upload.html");
		} catch (IOException e) {
			e.printStackTrace();
		}
	    
	} // doPost()

HTML

アップロード画面.

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>upload.html</title>
</head>

<body>

<!-- ファイルをアップロードする際は,<form >タグの enctype 属性の値を "multipart/form-data" と設定します.(RFC 1867) -->
<!-- action 属性の値にはサーブレットを設定します. -->
<form method="POST"
      enctype="multipart/form-data"
      action="Uploader">

  <!-- アップロードするファイルを選択します. -->
  <!-- input タグの type 属性の値を "file" と設定します. -->
  <!-- name 属性も設定します. -->
  <input type="file" name="file_to_be_uploaded" />
  <input type="submit" value="upload file" />

</form>

</body>

</html>

Java
スポンサーリンク
コピペワールド