Servlet - 응용문제 [파일을 서버에 저장]

2025. 2. 21. 17:29·Web
해당 파일 첨부 기능을 활성화하는 프로세서입니다
해당 파일은 최대 5MB까지 첨부가 가능하며, 해당 파일전송은 io_ok.do로 전달됩니다
io_ok에서 web경로로 notice라는 디렉토리에 해당 파일이 저장되도록 코드를 작성하시오

 

io.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹에 파일 전송</title>
</head>
<body>
<!-- multi-part/form-data : 첨부파일 사용시 무조건 form 적용해야함 -->
<form id="frm" method="post" action="./io_ok.do" enctype="multipart/form-data">
파일 첨부 :<input type="file" name="mfile" accept="image/*"><br>
<input type="button" value="업로드" onclick="file_check()">
</form> 
</body>
<script>
	function file_check() {
		var finfo = frm.mfile.files;
		
		if (finfo[0].size > 5242880) {
			alert("첨부파일 용량이 5MB 이상입니다.");
		} else {
			frm.submit();
		}
	}
</script>
</html>

 

io_ok.java (servlet)

package review;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig(	//첨부파일 환경설정 
		fileSizeThreshold = 1024 * 1024 * 5	//한개의 파일 전송 크기 : 5MB 
		)
public class io_ok extends HttpServlet {
	private static final long serialVersionUID = 1L;
	PrintWriter pw = null;
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		try {
			this.pw = response.getWriter();
			
			Part mfile = request.getPart("mfile");
			
			String filename = mfile.getSubmittedFileName();		
			long filesize = mfile.getSize();	//파일 용량 크기 
			if(filesize > 5242880) {
				this.pw.write("<script>" 
						+ "alert('파일 첨부 용량은 최대 5MB까지 입니다.');" 
						+ "history.go(-1);" 
						+ "</script>");
			}
			else {
				String url = request.getServletContext().getRealPath("/notice/");
				mfile.write(url + filename);
				this.pw.write("<script>" 
						+ "alert('정상적으로 파일 업로드되었습니다.');" 
						+ "history.go(-1);" 
						+ "</script>");
			}
		} catch (Exception e) {
			System.out.println(e);
			this.pw.write("<script>" 
						+ "alert('올바른 접근방식이 아닙니다.');" 
						+ "history.go(-1);" 
						+ "</script>");
		} finally {
			this.pw.close();
		}
	}
}

 

⭐️ 파일 전송시 주의사항!

  • form
    • method는 무조건 post
    • enctype="multipart/form-data" 속성 필수 
  • servlet
    • @MultipartConfig 필수 
    • 파일의 변수명은 Part

 

저작자표시 비영리 변경금지 (새창열림)
'Web' 카테고리의 다른 글
  • HTML + js + servlet + java + MySQL
  • Servlet - 응용문제 [쿠폰 등록 시스템]
  • Servlet - 모델
  • Servlet - 응용문제 [영화 예매 시스템]
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      exam1_1~10
      file24
      ab1
      file25
      Oracle
      spring-boot
      macbook pro m4
      java_io1~10
      file25_t
      re_java10
      notice_writer
      net1
      net4
      re2
      io_dto
      net2
      datalist
      noticewriteok
      net3
      net5~10
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Servlet - 응용문제 [파일을 서버에 저장]
    상단으로

    티스토리툴바