본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

11/16 웹 제작 -

by 인생즐겜러 2022. 11. 28.
728x90
반응형

AWS 클라우드환경 네이티브 수업 122 일차

 

 

 

진행

1. 웹 제작 - 

 

 

 

 

 

요약

1. 웹 제작 - 

 

 

 

 

 


 

 

 

 

 

Ajax로 파일 업로드 해보기(드래그 사용)

 

// MediaUtils.java
// 업로드한 파일이 이미지 파일인지 알아보기 위한 코드

package com.edu.util.upload;


import java.util.HashMap;
import java.util.Map;

import org.springframework.http.MediaType;

//=====================================================
// 업로드에 사용할 미디어에 대한 정의 클래스
//=====================================================


public class MediaUtils {
	
	// static으로 선언되었으므로 프로그램이 실행될 때
	// private static Map<String, MediaType> mediaMap;과
	// static{}(스태틱 블록)은 바로 메모리에 로딩된다.
	private static Map<String, MediaType> mediaMap;
	
	//=====================================================
	// statick block
	// 클래스를 로딩할 때 제일 먼저 실행되는 코드
	//=====================================================
	static {
		mediaMap = new HashMap<String, MediaType>();
		mediaMap.put("JPG", MediaType.IMAGE_JPEG);
		mediaMap.put("GIF", MediaType.IMAGE_GIF);
		mediaMap.put("PNG", MediaType.IMAGE_PNG);
		
	}
	
	//=====================================================
	// 이미지 파일인지 아닌지 구분하는 메서드
	// 이미지 파일을 업로드하면 썸네일 파일을 만들고, 나머지 파일들은 그냥 업로드한다.
	// getMediaType(String type)을 호출하여
	// 위의 static{}에 있으면 이미지 파일, 아니면 일반 파일이다.
	//=====================================================
	public static MediaType getMediaType(String type) {
		
		// toUpperCase() => 대문자로 변경
		return mediaMap.get(type.toUpperCase());
	}

}	// End - public class MediaUtils

 

// 컨트롤러 설정

package com.edu.util.upload;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

//=====================================================
// AJAX를 이용하여 파일 올리기
//=====================================================
@Controller
@RequestMapping(value ="/util/upload")
public class AjaxUploadController {
	
	private static final Logger logger = LoggerFactory.getLogger(AjaxUploadController.class);
	
	// 업로드할 경로(디렉토리)는 servlet-context.xml에 설정해 놓았다.
	@Resource(name="uploadPath")
	String uploadPath;
	
	//=====================================================
	// 파일 올리기(AJAX)화면 불러오기
	//=====================================================
	@RequestMapping(value="/uploadAjax", method=RequestMethod.GET)
	public String uploadAjax() {
		
		logger.info("AjaxUploadController 파일 올리기(AJAX) 화면 불러오기");
		
		return "/util/upload/uploadAjax";
		
	}	// End - public String uploadAjax()

}	// End - public class AjaxUploadController

 

<!-- uploadAjax.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c"	uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>
<%  request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>파일 업로드(AJAX)</title>
	<style>
		.fileDrop {
			width: 100%;
			height: 200px;
			border: 1px dotted blue;
		}
		small {
			margin-left: 3px;
			font-weight: bold;
			color: gray;
		}
	</style>
</head>
<body>
	<!-- 상단 메뉴 -->
	<jsp:include page="../../common/topMenu.jsp" flush="false"/>
	
	<div class="container">
		<h2>Ajax File upload</h2>
		<div class="fileDrop"></div><!-- 파일을 업로드할 영역 -->
		<div class="uploadedList"></div><!-- 업로드된 파일목록을 출력할 영역 -->
	</div>
	
	
	<!-- footer -->
	<jsp:include page="../../common/footer.jsp" flush="false"/>
</body>
<script>
	//=====================================================
	// 스크립트는 JQuery를 불러들인 다음에 기술한다.
	// 순서가 바뀌면 스크립트가 작동하지 않는다.
	//=====================================================
	$(function() {
		//=====================================================
		// 드래그의 기본효과를 막는다.
		// 드래그의 기본효과를 막지 않으면 드래그된 곳에 이미지가 보이게 된다.
		//=====================================================
		$(".fileDrop").on("dragenter dragover", function(event) {
			event.preventDefault();
		});
		
		
		
		//=====================================================
		// 그림 전송영역에 그림을 떨어트릴때 처리하는 함수
		//=====================================================
		$(".fileDrop").on("drop", function(event) {
			alert("그림을 떨어트림");
			// 그림이 drop될때의 기본효과를 막는다.
			event.preventDefault();
		});
		
		// 첨부파일 배열 : 드래그된 파일의 정보
		// Ctrl + 클릭으로 여러개의 파일을 동시에 올릴 수 있다.
		var files = event.originalEvent.dataTransfer.files;
		
		var file = files[0];	//첫번째 파일
		
		// 파일정보가 콘솔에 올라간다.
		console.log(file);
		
		// AJAX로 서버에 전달할 때에는 폼이 별도로 존재하지 않기 때문에 폼 객체를 만들어 주어야 한다.
		var formData = new FormData(); // 폼 객체
		
		// 폼에 file 변수를 추가한다.
		formData.append("file", file);
		
		// 서버에 파일을 업로드한다.(백그라운드에서 실행이 된다.)
		// enctype="multipart/form-data" target="iframe1"
		// contentType : false => multipart/form-data로 처리가 된다.
		$.ajax({
			
		})
		
		
	});
</script>
</html>

 

 

이후는 다음 수업 때...

728x90
반응형

댓글