겉바속촉

[spring] 입출력 연습하기 본문

IT일기(하반기)/SPRING

[spring] 입출력 연습하기

겉바속촉 2020. 7. 2. 13:03
728x90
반응형

pom.xml에 다음 코드를 추가해주었습니다

</dependecies>가 끝나기 직전에 추가해주었어요:)

 

<dependency>
       <groupId>commons-fileupload</groupId>
       <artifactId>commons-fileupload</artifactId>
       <version>1.2.2</version>
  </dependency>

 

 

servlet-context.xml에 다음 코드 추가

<!-- file upload setting -->
	<beans:bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<beans:property name="maxUploadSize" value="3000000"/>
	</beans:bean>

 

 

그리고 다음 코드를 표시해준 곳과 같이 추가해주세요:)

<resources mapping="/save/**" location="/WEB-INF/save/" />

 

 

upload 컨트롤러 설정해줄건데요

그 전에 필요한 것들 여러개 만들어줄게요

 

UploadController.java

 

package upload.data;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UploadController {

	@GetMapping("/upload/uploadform")
	public String uploadform()
	{
		return "upload/uploadForm"; //jsp주소
	}
}

 

 

uploadForm.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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
	<table style="width: 400px;" class="table table-bordered">
		<caption><b>이미지업로드 연습</b></caption>	
		<tr>
			<th style="width: 150px;">메세지</th>		
			<td>
				<input type="text" name="msg" class="form-control">
			</td>
		</tr>
		<tr>
			<th style="width: 150px;">이미지</th>
			<td>
				<input type="file" name="photo" class="form-control">
			</td>
		</tr>
		<tr>
			<td colspan="2" align="center">
				<button type="submit" class="btn btn-danger">이미지 업로드 하기</button>
			</td>
		</tr>		
	</table>
</form>
</body>
</html>

이제는 다음과 같이 이미지를 골라서 넣으면

어디에 저장될 지 설정해주셔야합니다

다음과 같이 WEB-INF에 save폴더 생성해주세요


톰캣 서버의 가상 폴더라고 생각해주시면 okay

 

 

 

 

그리고 아까 만들었던 패키지에다가

SpringFileWriter.java를 추가해주세요:)

 

 

 

SpringFileWriter.java를 이제 작성해볼게요

 

 

이제 우리가 여태 사용해주던 String, int...이런 형태가 아니라

byte라고 해주셔야합니다

File은 우리가 byte로 밖에 받지 못하기 때문이쥬!!

 

 

다음과 같이 작성하다보면 빨간줄이 뜨니까

우리가 try catch 해주시면 okay

 

 

 

전체 SpringFileWriter.java

package upload.data;

import java.io.FileOutputStream;
import java.io.IOException;

import org.springframework.web.multipart.MultipartFile;

public class SpringFileWriter {
	
	FileOutputStream fos;
	
	public void writeFile(MultipartFile file, String path, String fileName)
	{
		try {
			byte fileData[]=file.getBytes();
			fos=new FileOutputStream(path+"\\"+fileName);
			fos.write(fileData);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("파일업로드 오류:"+e.getMessage());
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}

 

 

이제 UploadController.java로 가셔서

다음과 같이 해주실거에요:)

 

 

우리가 폼에서 넣어주는 메세지와 사진을 가지고 와야겠쥬?

RequestParam으로 가져와주세요

 

 

 

 

그리고 업로드할 경로까지 적어주셔야 합니다

 

String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");

 

 

그리고 이미지저장 메소드 호출해주실 때 다음과 같이 photo로 바꿔주셔야합니다:)

 

 

 

전체 UploadController.java

package upload.data;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

	@GetMapping("/upload/uploadform")
	public String uploadform()
	{
		return "upload/uploadForm"; //jsp주소
	}
	
	@PostMapping("/upload/upload")
	public ModelAndView upload(@RequestParam MultipartFile photo,
			@RequestParam String msg, HttpServletRequest request)
	{
		
		//이미지를 업로드할 경로구하기
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		System.out.println(path);
		
		//파일명
		String fileName=photo.getOriginalFilename();
		
		//이미지 저장에 필요한 fileUpload에 관한 사용자 지정클래스
		SpringFileWriter fileWriter=new SpringFileWriter();
		
		//이미지 저장 메소드 호출
		fileWriter.writeFile(photo, path, fileName);
		
		ModelAndView model=new ModelAndView();
		model.addObject("msg", msg);
		model.addObject("fileName", fileName);
		model.setViewName("upload/uploadResult");
		
		return model;
	}
}

 

그리고 result는 간단하게 적어주세요

<%@ 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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1>이미지 업로드 확인하기</h1>
메세지: ${msg }<br>
이미지<br> 
<img alt="" src="../save/${fileName }" style="max-width: 400px;">
</body>
</html>

 

이제 실행을 시키고

 

메세지 그윽한 눈빛이라고 입력했습니다:)

저는 겉바속촉 사진을 넣었습니다

그리고 이미지 업로드 하기를 누르면 이렇게 뜹니다!!

그렇다면 성공 !^^!

728x90
반응형