[Servlet_JSP] 11. 파일업로드

boing·2023년 8월 16일
0

Servlet_JSP

목록 보기
4/6

📌 https://commons.apache.org/

📂 apache제공 Commons Fileupload 라이브러리 이용하여 파일업로드 하기


1. jar파일 2개 다운받기 (C:\servlet_study 압축풀기)

  • FileUpload : commons-fileupload-1.4-bin.zip
  • IO : commons-io-2.13.0-bin.zip

2. 빌드패스 (프로젝트>lib>자동빌드패스)

  • commons-fileupload-1.4.jar
  • commons-io-2.13.0.jar

3. 파일업로드 jsp 작성 (uploadForm.jsp)

//apache guide
<form method="post" enctype="multipart/form-data">

4. 서블릿 작성 (UploadServlet.java)

//apache guide
protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// Create a factory for disk-based file items
		DiskFileItemFactory factory = new DiskFileItemFactory();

		// Configure a repository (to ensure a secure temp location is used)
		ServletContext servletContext = this.getServletConfig().getServletContext();
		File repository = 
        	(File) servletContext.getAttribute("jakarta.servlet.context.tempdir");
        // Or "javax.servlet.context.tempdir" for javax
        factory.setRepository(repository);

		// Create a new file upload handler
		// JakartaServletDiskFileUpload upload = new
		// JakartaServletDiskFileUpload(factory); 수정
		ServletFileUpload upload = new ServletFileUpload(factory);

		// Parse the request
		// List<DiskFileItem> items = upload.parseRequest(request); 수정
		try {
			List<FileItem> items = upload.parseRequest(request); // 예외처리

			// for (FileItem item : items.iterator()) {
			// 수정==>
			Iterator<FileItem> iter = items.iterator();
			// Process the uploaded items
			while (iter.hasNext()) {
				FileItem item = iter.next();
				if (item.isFormField()) {
					// type="file" 아닌 것 처리 => type="text"인 것 처리 //한글처리 필요
					String name = item.getFieldName();
					String value = item.getString("utf-8"); // 한글처리 필요
					System.out.println("text 데이터: " + name + "\t" + value);
				} else {
					// type="file"인 것 처리 //한글처리 자동
					String fieldName = item.getFieldName();
					String fileName = item.getName();
					String contentType = item.getContentType();
					boolean isInMemory = item.isInMemory();
					long sizeInBytes = item.getSize();
					System.out.println("fieldName: " + fieldName);
					System.out.println("fileName:" + fileName);
					System.out.println("contentType:" + contentType);
					System.out.println("isInMemory:" + isInMemory);
					System.out.println("sizeInBytes:" + sizeInBytes);

					// 진짜 특정 경로에 파일 저장
					File f = new File("c:\\upload", fileName); // 경로지정
					try {
						item.write(f); // 파일 저장
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			} // end while

		} catch (FileUploadException e) {
			e.printStackTrace();
		} // try-catch
		
	}// doPost
  • import
    java.util.List
    org.apache.commons.fileupload
    java.io.File

📂 파일 다운로드

  • 라이브러리 없음 직접 구현하기
profile
keep coding

0개의 댓글