JSP 파일 업로드

조예빈·2024년 5월 7일

Servlet

목록 보기
10/10
post-thumbnail

JSP는 대부분의 기능을 오픈 소스로 제공한다.

우선, 파일 업로드 기능을 사용하려면 오픈 소스 라이브러리를 설치해야 함
설치 파일 링크
링크에 들어가 'commons-fileupload'를 검색한다.

1번, 3번을 다운받으면 된다.

FileUpload

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/upload.do")
public class FileUpload extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String encoding = "utf-8";
		File currentDirPath = new File(System.getProperty("user.home") + "/Desktop"); // 업로드할 파일 경로 지정. 무언가를 하려고 파일 객체를 만든 것
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setRepository(currentDirPath); // 파일 경로를 설정
		factory.setSizeThreshold(1024 * 1024); // 최대 업로드 가능한 파일 크기 설정
		ServletFileUpload upload = new ServletFileUpload(factory); // 생성자가 fileItemFactory 객체를 받음
		try {
			List<FileItem> items = upload.parseRequest(request); // request 객체에서 매개변수를 List로 가져옴
			for (int i = 0; i < items.size(); i++) {
				FileItem fileItem = items.get(i); // 파일 업로드창에서 업로드된 항목들을 하나씩 가져옴
				if (fileItem.isFormField()) { // 폼 필드이면
					System.out.println(fileItem.getFieldName() + "=" + fileItem.getString(encoding)); // 전송된 매개변수 값을 출력(이름, 값)
				} else { // 폼 필드가 아니면
					System.out.println("매개변수이름:" + fileItem.getString(encoding));
					System.out.println("파일이름:" + fileItem.getName());
					System.out.println("파일크기:" + fileItem.getSize() + "bytes");
					if (fileItem.getSize() > 0) { // 파일 업로드 기능 수행
						int idx = fileItem.getName().lastIndexOf("\\");
						if (idx == -1) { //업는 경우
							idx = fileItem.getName().lastIndexOf("/"); //ex)a/b/c/test.jpg이면 뒷부분부터 보는 것
						}
						String fileName = fileItem.getName().substring(idx + 1); // 업로드한 파일 이름을 가져옴
						File uploadFile = new File(currentDirPath + "\\" + fileName); //skip문자이기 때문에 역슬래쉬를 두 개
						fileItem.write(uploadFile); // 업로드한 파일 이름으로 저장소에 파일을 업로드
					} // end if
				} // end if
			} // end for
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

FileDownload

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/download.do")
public class Download extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String file_repo = System.getProperty("user.home") + "/Downloads";
		String fileName = request.getParameter("fileName");
		System.out.println("fileName=" + fileName);
		OutputStream out = response.getOutputStream();
		String downFile = file_repo + "\\" + fileName;
		File f = new File(downFile);
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Content-disposition", "attachment; fileName=" + fileName);
		FileInputStream in = new FileInputStream(f);
		byte[] buffer = new byte[1024 * 8];
		while (true) {
			int count = in.read(buffer);
			if (count == -1) {
				break;
			}
			out.write(buffer, 0, count);
		}
		in.close();
		out.close();
	}
}
http://localhost:8000/pro15/download.do?fileName=업로드된 파일명

을 입력하면 파일이 다운로드 된다.

cos 라이브러리

cos다운 링크

ajax

https://developers.google.com/speed/libraries?hl=ko#jquery

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글