spring multipart 파일업로드

Jiwon Park·2023년 3월 14일
0

우선 파일전송시 지켜야하는 규칙이 있다.

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

기본적으로 enctype = "application/x-www-form-urlencoded"이 default로 생략되어있다. 이 경우에 input (type="text")만 전송 한다면 요청파라미터의 문자열을 &로 구분해서 전송한다.

반면에 input(type="file")은 바이너리 데이터로 전송해야하고 보통 file만 전송하는 경우는 거의 없다.
따라서, file이 포함된 form 을 전송할 때 multipart를 사용하면 다른 데이터 타입을 구분해서 전송할수 있게 해준다.

-> http 요청에 각각의 content-type이 다르기 때문에 multipart가 두 종류의 데이터를 구분해서 하나의 요청body에 넣어준다.

1. pom.xml 의존성 추가

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

2. servlet-context.xml

<!--servlet-context.xml-->

<beans:bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<beans:property name="maxUploadSize" value="10240000"/>
</beans:bean>

3. Controller

//Carcontroller.java

private HttpServletRequest request;
	
@Autowired
public CarController(HttpServletRequest request) {
		this.request = request;
	}

@GetMapping("/add")
	public String requestAddCarForm() {return "addCar";}
	
@PostMapping("/add")
	public String submitAddNewCar(@ModelAttribute CarDTO car) {
		
		MultipartFile carimage = car.getCarimage();
		
		String saveName = carimage.getOriginalFilename();
		
		String realPath = request.getSession().getServletContext().getRealPath("/resources/images");
		
		File saveFile = new File(realPath, saveName);
		
		if(carimage != null && !carimage.isEmpty()) {
			try {
				carimage.transferTo(saveFile);
	            car.setCfilename(saveName);
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}	
		carService.setNewCar(car);
		
		return "redirect:/cars";
	}

4. jsp

<!-- cars.jsp-->
<img src = "/resources/images/${car.cfilename}" style = "height : 200px">
profile
안녕하세요

0개의 댓글