[java] JSP에서의 임시 파일 처리 방법

웹 개발 중에 임시 파일을 처리해야 하는 경우가 종종 있습니다. 예를 들어 사용자가 파일을 업로드하거나, 다운로드된 파일을 임시로 저장하는 경우입니다. JSP에서는 이러한 임시 파일을 다루는 방법을 제공하고 있습니다. 이 글에서는 JSP에서의 임시 파일 처리 방법을 알아보겠습니다.

1. 파일 업로드 처리하기

사용자가 파일을 업로드하는 경우, JSP에서는 request.getPart() 또는 request.getInputStream() 메서드를 사용하여 클라이언트에서 전송된 파일 데이터에 접근할 수 있습니다. 이 데이터를 임시 파일로 저장하기 위해 다음과 같은 코드를 사용할 수 있습니다.

<%@ page import="java.io.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>

<%
// 임시 파일을 저장할 경로 지정
String tempFilePath = "C:/temp/";

// 파일 파트 가져오기
Part filePart = request.getPart("file");

// 파일 이름 가져오기
String fileName = getFileName(filePart);

// 임시 파일 생성
String tempFileName = System.currentTimeMillis() + "_" + fileName;
String tempFileFullPath = tempFilePath + tempFileName;

// 임시 파일 저장
InputStream inputStream = filePart.getInputStream();
OutputStream outputStream = new FileOutputStream(tempFileFullPath);

int read = 0;
byte[] bytes = new byte[1024];

while ((read = inputStream.read(bytes)) != -1) {
    outputStream.write(bytes, 0, read);
}

outputStream.close();
inputStream.close();
%>

<%!
private String getFileName(Part part) {
    String contentDisposition = part.getHeader("content-disposition");
    String[] splited = contentDisposition.split(";");

    for (String item : splited) {
        if (item.trim().startsWith("filename")) {
            return item.substring(item.indexOf("=") + 2, item.length() - 1);
        }
    }

    return null;
}
%>

위의 코드에서 tempFilePath 변수에 임시 파일을 저장할 경로를 지정합니다. 이 경로를 원하는 경로로 수정할 수 있습니다. 또한 request.getPart("file")에서 “file”은 클라이언트에서 전송한 파일 인풋 필드의 이름입니다. 이 부분도 필요에 따라 수정할 수 있습니다.

업로드된 파일 데이터를 임시 파일로 저장한 후에는 해당 파일을 원하는 위치로 옮기거나, 처리하는 등의 작업을 수행할 수 있습니다.

2. 파일 다운로드 처리하기

다운로드된 파일이 있는 경우, JSP에서는 해당 파일을 클라이언트로 전송하기 전에 임시 파일로 저장할 수 있습니다. 이를 위해 다음과 같은 코드를 사용할 수 있습니다.

<%@ page import="java.io.*" %>
<%@ page contentType="text/html; charset=UTF-8" %>

<%
// 다운로드할 파일 경로 지정
String filePath = "C:/downloads/sample_file.txt";

// 파일 이름 가져오기
String fileName = new File(filePath).getName();

// 응답 헤더 설정
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

// 파일 읽기 및 응답 출력 스트림에 쓰기
InputStream inputStream = new FileInputStream(filePath);
OutputStream outputStream = response.getOutputStream();

int read = 0;
byte[] bytes = new byte[1024];

while ((read = inputStream.read(bytes)) != -1) {
    outputStream.write(bytes, 0, read);
}

outputStream.close();
inputStream.close();
%>

위의 코드에서 filePath 변수에 다운로드할 파일의 경로를 지정합니다. 이 경로를 원하는 파일의 경로로 수정할 수 있습니다.

이 코드를 사용하여 웹 페이지에서 파일을 다운로드할 수 있으며, 다운로드한 후 임시 파일로 저장된 파일은 삭제할 수 있습니다.

JSP에서 임시 파일 처리를 위한 방법을 알아보았습니다. 파일 업로드 및 다운로드 시 임시 파일을 사용하면, 용량이 큰 파일이나 여러 파일을 처리할 때 유용합니다.

참고문서: