카테고리 없음

File Upload

Handy Smurf 2020. 8. 27. 13:41

pom.xml

 

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
		

servlet-context.xml

	<beans:bean
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
		id="multipartResolver">
		<beans:property value="utf-8" name="defaultEncoding" />
		<!-- 1024 * 1024 * 10 bytes 10MB -->
		<beans:property value="104857560" name="maxUploadSize" />
		<!-- 1024 * 1024 * 2 bytes 2MB -->
		<beans:property value="2097152"
			name="maxUploadSizePerFile" />
		<beans:property value="file:/C:/upload/tmp"
			name="uploadTempDir" />
		<beans:property value="10485756" name="maxInMemorySize" />
	</beans:bean>

sampleController

	@GetMapping("exUpload")
	public void exUpload() {
		log.info("/exUpload..........");
	}

view>sample>exUpload.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="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%@ page import="java.sql.*" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://kit.fontawesome.com/a076d05399.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>

<title>Insert title here</title>
</head>
<body>
<form action="/sample/exUploadPost"  method="post" enctype="multiPART/form-data">

 <div>
   <input type='file' name='files'>
 </div>
 <div>
   <input type='file' name='files'>
 </div>
 <div>
   <input type='file' name='files'>
 </div>
 <div>
   <input type='file' name='files'>
 </div>
 <div>
   <input type='file' name='files'>
 </div>
 <div>
   <input type='submit'>
 </div> 
</body>
</html>

실행

 

http://localhost:1234/sample/exUpload

데이터를 post로 받을 때 

@PostMapping("exUploadPost")
	public void exUploadPost() {
		log.info("/exUploadpost..........");
	}
	@PostMapping("exUploadPost")
	public void exUploadPost(ArrayList<MultipartFile> files) {
		log.info("/exUploadpost..........");
		
	for(MultipartFile file : files) {
		log.info("--------");
		log.info("name:" + file.getOriginalFilename());
		log.info("size:" + file.getSize());
		
	}
		
	}
}

 

다른 방법

 

	@PostMapping("exUploadPost")
	public void exUploadPost(ArrayList<MultipartFile> files) {
		log.info("/exUploadpost..........");

		files.forEach(file -> {
			log.info("name:" + file.getOriginalFilename());
     		log.info("size:" + file.getSize());
		});
	}
}

8월 27, 2020 9:42:42 오전 org.apache.catalina.startup.Catalina start
정보: 서버가 [5,233] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - basic...................
INFO : org.zerock.controller.SampleController - basic...................
INFO : org.zerock.controller.SampleController - /exUpload..........
INFO : org.zerock.controller.SampleController - /exUploadpost..........
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:안녕 한국.png
INFO : org.zerock.controller.SampleController - size:15925
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:toursite.pptx
INFO : org.zerock.controller.SampleController - size:1921916
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:index.jsp
INFO : org.zerock.controller.SampleController - size:226
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:
INFO : org.zerock.controller.SampleController - size:0
INFO : org.zerock.controller.SampleController - --------
INFO : org.zerock.controller.SampleController - name:
INFO : org.zerock.controller.SampleController - size:0
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.SampleController - /exUpload..........
INFO : org.zerock.controller.SampleController - /exUploadpost..........
INFO : org.zerock.controller.SampleController - name:fileUpload.7z
INFO : org.zerock.controller.SampleController - size:10328
INFO : org.zerock.controller.SampleController - name:스타트 스프링 부트 소스코드 예제.zip
INFO : org.zerock.controller.SampleController - size:2049876
INFO : org.zerock.controller.SampleController - name:2020년계획표_양식 (1).xlsx
INFO : org.zerock.controller.SampleController - size:38070
INFO : org.zerock.controller.SampleController - name:안녕 한국.png
INFO : org.zerock.controller.SampleController - size:15925
INFO : org.zerock.controller.SampleController - name:1.png
INFO : org.zerock.controller.SampleController - size:16386

람다식

	
		//1. lamda로 작성 (parameter 파라미터가 하나인게 분명할 때 ()와 클래스를 쓰지 않아도 됨) {body}
		files.forEach((MultipartFile file) -> {
			
			log.info("--------");
			log.info("name:" + file.getOriginalFilename());
			log.info("size:" + file.getSize());
		});
	}

 

 

@ControllerAdvice

 

AOP Aspect 반점 Oriented 지향 Programming

 

cross-concern 공통적인 관심사 / 횡단 관심사 

 

Statement 수직 보통 흐름

 

-어떤 관점 관심 가로 @Initbinder (메소드가 실행하기 전에 끼워 넣어 준다)

Exception(오류가 날때 실행한다)  

 

 

package org.zerock.controller;

import org.springframework.stereotype.Controller;

@Controller
public class ExceptionController {

}

 

 

 

package org.zerock.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.log4j.Log4j;

@Controller
@RequestMapping("/except")
@Log4j

public class ExceptionController {
 @RequestMapping("/a")
 public void methoda() {
	 log.info("a method");
	 
	 int i = 0;
	 int j = 5 / i; //오류가 날 것 같다
 
	 log.info("method done");
 
 
 }

 		@ExceptionHandler(Exception.class)
 		public void except() { //메소드 이름이 어떻든 간에 @ExceptionHandler 어노테이션이 있는 경우 
 			log.info("handle exception....");
 		}
}

http://localhost:1234/except/a

8월 27, 2020 10:38:00 오전 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-1234"]을(를) 시작합니다.
8월 27, 2020 10:38:00 오전 org.apache.catalina.startup.Catalina start
정보: 서버가 [5,238] 밀리초 내에 시작되었습니다.
INFO : org.zerock.controller.HomeController - Welcome home! The client locale is ko_KR.
INFO : org.zerock.controller.ExceptionController - a method
INFO : org.zerock.controller.ExceptionController - handle exception....

 한 곳에만 영향을 주는 것이 아닌 여러 곳에 영향을 미쳐야 할 때 사용하는 어노테이션이 @ControllerAdvice이다.

 

우선 순위는 안에 들어가 있는 handler가 높다.

전역

package org.zerock.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import lombok.extern.log4j.Log4j;

@ControllerAdvice
@Log4j
public class MyControllerAdvice {

	@ExceptionHandler(ArrayIndexOutOfBoundsException.class)
	public void handleArrayIndexOutOfBoundsException() {
		log.info("array index 넘음....");
	}
}