[java] Tomcat에서의 파일 업로드 및 다운로드 처리 방법

파일 업로드와 다운로드는 웹 애플리케이션에서 자주 사용되는 기능입니다. 이번 기사에서는 Tomcat에서 파일 업로드 및 다운로드를 처리하는 방법에 대해 알아보겠습니다.

1. 파일 업로드 처리

파일 업로드를 처리하기 위해서는 Multipart 요청을 처리할 수 있는 라이브러리를 사용해야 합니다. 대표적으로는 Apache Commons FileUpload 라이브러리가 있습니다.

  1. commons-fileupload 라이브러리를 프로젝트에 추가합니다.
  2. 웹 애플리케이션의 web.xml 파일에 다음과 같은 설정을 추가합니다.
<web-app>
    <filter>
        <filter-name>multipartFilter</filter-name>
        <filter-class>org.apache.commons.fileupload.servlet.ServletFileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>multipartFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  1. 파일을 업로드할 수 있는 HTML Form을 작성합니다.
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>
  1. 파일을 업로드하는 서블릿을 생성하고 업로드된 파일을 처리합니다.
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 파일 업로드 처리 로직
        Part filePart = request.getPart("file");
        String fileName = filePart.getSubmittedFileName();
        // 파일 저장 로직
    }
}

2. 파일 다운로드 처리

파일 다운로드를 처리하기 위해서는 서블릿에서 파일의 바이너리 데이터를 응답에 쓰는 방식으로 처리할 수 있습니다.

  1. 다운로드할 파일의 경로를 알아내고, 파일 객체를 생성합니다.
String filePath = "/path/to/file.ext";
File file = new File(filePath);
  1. 파일의 MIME 타입을 알아내고, 응답 헤더에 설정합니다.
String mimeType = getServletContext().getMimeType(file.getPath());
response.setContentType(mimeType != null ? mimeType : "application/octet-stream");
  1. 파일의 크기를 알아내고, 응답 헤더에 설정합니다.
long fileSize = file.length();
response.setContentLengthLong(fileSize);
  1. 파일의 이름을 알아내고, 응답 헤더에 설정합니다.
String fileName = file.getName();
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
  1. 파일의 내용을 응답에 쓰도록 스트림을 생성하고, 파일을 읽어와 쓰기 작업을 수행합니다.
try (InputStream inputStream = new FileInputStream(file);
     OutputStream outputStream = response.getOutputStream()) {
    byte[] buffer = new byte[4096];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }
}

이제 Tomcat에서 파일 업로드 및 다운로드를 처리하는 방법에 대해 알아보았습니다. 이를 통해 웹 애플리케이션에서 파일 관련 기능을 구현할 수 있습니다.

참고 자료


해당 기사는 Tomcat에서의 파일 업로드 및 다운로드 처리 방법에 대해 다루었습니다.