본문 바로가기
CLASS/JSP

#4-3 / 파일 업로드(stream)

by hingu 2024. 6. 27.
Stream I/O로 파일 저장

- .jsp
<body>
	<form id="frm" enctype="multipart/form-data">
		첨부파일 : <input type="file" name="mfile"><br><br>
		<input type="button" value="전송" onclick="update()">
	</form>
</body>

<script type="text/javascript">
	function update(){
		frm.method = "post";
		frm.action = "./jsp15.do";
		frm.submit();	
	}
</script>

- servlet 파일 (.java)
package shop;

@MultipartConfig(
	fileSizeThreshold = 1024*1024*2,
	maxFileSize = 1024*1024*5,
	maxRequestSize = 1024*1024*100
)
public class jsp15 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	//Stream I/O로 파일 저장
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		Part file = request.getPart("mfile");
		
		String url = request.getServletContext().getRealPath("/upload/");
		String filename = file.getSubmittedFileName();
		String save = url+filename;
		
		//fileinputstream : 최고엄마 , 네트워크로 넘어 올 시 이렇게 사용
		InputStream is = file.getInputStream(); //파일 전송에 대한 파일 읽기
		
		//전송된 파일을 해당 경로에 저장시키는 형태
		FileOutputStream fs = new FileOutputStream(save);

		//파일 크기 변환
		byte[] bf = new byte[1024*1024*2]; //2MB
		
		//파일의 전송 크기만큼 저장시킴
		int size = 0;
		while((size=is.read(bf))!= -1) {
			fs.write(bf,0,size);
		}
		fs.flush();
		fs.close();
		is.close();

		PrintWriter pw = response.getWriter();
		pw.write("<script>"
				+ "alert('정상적으로 파일이 업로드 되었습니다');"
				+ "location.href='./jsp15.jsp';"
				+ "</script>");
		
	}
}