웹 파일 업로드 구현 방법

웹 개발 경험이 있는 개발자라면 파일 업로드 기능에 익숙할 것입니다. 하지만 자신의 웹사이트에 파일 업로드 기능을 구현하는 방법은 많은 개발자에게 어려운 과제일 수 있습니다. 최근 웹 개발 프로젝트를 진행하며 웹 환경에서 파일 업로드가 작동하는 원리를 정리해 보았습니다. 이 글에서는 파일 업로드의 핵심 구현 방법을 소개합니다.

JSP 페이지의 주요 코드:

<body>
    <h1>단일 파일 업로드</h1>
    <hr/>
    <form action="upload" method="post" enctype="multipart/form-data">
    파일 선택<input type="file" name="document"/><br/>
    <input type="submit" value="업로드 시작"/>
    </form>
    <h1>파일 이름 지정 업로드</h1>
    <hr/>
    <form action="customName" method="post" enctype="multipart/form-data">
    원하는 파일 이름<input type="text" name="customName"/><br/>
    파일 선택<input type="file" name="document"/><br/>
    <input type="submit" value="업로드 시작"/>
    </form>
    <h1>자동 파일 이름 생성 업로드</h1>
    <hr/>
    <form action="autoName" method="post" enctype="multipart/form-data">
    파일 선택<input type="file" name="document"/><br/>
    <input type="submit" value="업로드 시작"/>
    </form>
    <h1>다중 파일 업로드</h1>
    <hr/>
    <form action="multiUpload" method="post" enctype="multipart/form-data">
    파일1<input type="file" name="document"/><br/>
    파일2<input type="file" name="document"/><br/>
    파일3<input type="file" name="document"/><br/>
    <input type="submit" value="모두 업로드"/>
    </form>
  </body>

이제 각 업로드 방식에 대한 구현 코드를 소개합니다.

<strong>단일 파일 업로드 처리:</strong>
FileHandler handler = new FileHandler(); 
handler.initialize(this.getServletConfig(), request, response);
try {
    handler.processUpload();
    handler.saveTo("uploads");
} catch (FileUploadException e) {
    e.printStackTrace();
}

사용자 지정 파일 이름 업로드:

FileHandler handler = new FileHandler();
handler.initialize(this.getServletConfig(), request, response);
try {
    handler.processUpload();
    String customName = handler.getRequest().getParameter("customName");
    
    String storagePath = this.getServletContext().getRealPath("/uploads");
    String extension = handler.getUploadedFiles().getFile(0).getExtension();
    
    String fullFileName = storagePath + File.separator + customName + "." + extension;
    
    handler.getUploadedFiles().getFile(0).storeAs(fullFileName);
} catch (FileUploadException e) {
    e.printStackTrace();
}
<strong>자동 파일 이름 생성 업로드:</strong>
FileHandler handler = new FileHandler();
handler.initialize(this.getServletConfig(), request, response);

String generatedFileName = "";
try {
    handler.processUpload();
    
    FileNameGenerator generator = new FileNameGenerator();
    String uniqueName = generator.createUniqueName();
    
    String storagePath = this.getServletContext().getRealPath("/uploads");
    String extension = handler.getUploadedFiles().getFile(0).getExtension();
    
    String fullFileName = storagePath + File.separator + uniqueName + "." + extension;
    
    handler.getUploadedFiles().getFile(0).storeAs(fullFileName);
    generatedFileName = uniqueName + "." + extension;
} catch (FileUploadException e) {
    e.printStackTrace();
}

고유 파일 이름 생성 유틸리티 클래스:

package com.utils.file;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class FileNameGenerator {
	
	public FileNameGenerator() {
		// 생성자
	}
	
	public String createUniqueName() {
		// UUID 생성
		String uuid = UUID.randomUUID().toString().replace("-", "");
		
		// 현재 시간 정보 추가
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
		String timestamp = dateFormat.format(new Date());
		
		// 고유 이름 조합
		return uuid + "_" + timestamp;
	}
	
	public static void main(String[] args) {
		FileNameGenerator generator = new FileNameGenerator();
		System.out.println("생성된 고유 파일 이름: " + generator.createUniqueName());
	}
}
<strong>다중 파일 업로드 처리:</strong>
FileHandler handler = new FileHandler();
handler.initialize(this.getServletConfig(), request, response);
try {
    handler.processUpload();
    
    for(int i = 0; i < handler.getUploadedFiles().getFileCount(); i++) {
        FileNameGenerator nameGenerator = new FileNameGenerator();
        String uniqueName = nameGenerator.createUniqueName();
        
        String storagePath = this.getServletContext().getRealPath("/uploads");
        String extension = handler.getUploadedFiles().getFile(i).getExtension();
        
        String fullFileName = storagePath + File.separator + uniqueName + "." + extension;
        
        handler.getUploadedFiles().getFile(i).storeAs(fullFileName);
    }
} catch (FileUploadException e) {
    e.printStackTrace();
}

위 코드를 통해 다양한 파일 업로드 시나리오를 구현할 수 있습니다. 각 방법은 특정 요구사항에 맞게 선택하여 사용할 수 있습니다.

태그: JSP Servlet FileUpload java WebDevelopment

7월 8일 19:04에 게시됨