본문 바로가기
웹개발/jsp

파일 업로드/다운로드구현 multipart

by heavenLake 2022. 2. 17.
반응형

  

출처사이트

 

https://velog.io/@eesiwoo/Spring-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C%EC%99%80-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C

 

시작 전 환경잡기

1.porm.xml에 dependency 추가하기

		<!-- file upload -->
		<dependency>
 			  <groupId>commons-fileupload</groupId>
			  <artifactId>commons-fileupload</artifactId>
 		      <version>1.4</version>
		</dependency>

2. servlet-context.xml에 bean 추가하기

<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

3. web.xml 설정하기

  • 용량은 10mb까지 가능하다.
  • multipart를 처리하기 위해 꼭!! 설정해야한다. 나는 용량제한만 하는줄 알고 안했다가.. 한참고생했다..
<!-- fileupload multipart-config maxSize set -->
	<multipart-config>
        <max-file-size>104857600</max-file-size> <!-- 10MB limit -->
        <max-request-size>104857600</max-request-size>
        <file-size-threshold>0</file-size-threshold>
    </multipart-config>
    <!-- fileupload multipart-config -->



업로드 / 다운로드 구현하기

1. 업로드 Controller 구현하기

  • get방식은 파일 업로드 페이지로 들어오기 위해 만든 메소드다.
  • if 문을 이용해 파일이 업로드되지 않았으면 파일이 없다고 알려준다.
  • 다운로드를 위해 파일명을 같이 넘겨준다.
@Controller
public class UploadController {
	private static final String FILE_PATH = "업로드될 경로 지정";
	
	@RequestMapping(value = "upload", method = RequestMethod.GET)
	public String link() {
		return "board";
	}
	
	
	@RequestMapping(value = "upload", method = RequestMethod.POST)
	public String upload(@RequestParam("uploadFile")MultipartFile file,
			     Model model) throws IllegalStateException, IOException {
		String fileName = file.getOriginalFilename();
		
		if(!file.getOriginalFilename().isEmpty()) {
			file.transferTo(new File(FILE_PATH, fileName));
			model.addAttribute("msg", "File uploaded successfully.");
			model.addAttribute("fileName", fileName);
		}else {
			model.addAttribute("msg", "Please select a valid mediaFile..");
		}
		
		return "board";
	}
}



2. 다운로드 Controller 구현하기

  • http명령어로 다운로드를 구현했다.
@Controller
public class DownloadController {
	private static final String FILE_PATH = "경로지정";
	
	@RequestMapping("download")
	@ResponseBody
	public byte[] downlod(HttpServletResponse response,
			      @RequestParam String filename) throws IOException{
		File file = new File(FILE_PATH, filename);
		
		byte[] bytes = FileCopyUtils.copyToByteArray(file);
		
		String fn = new String(file.getName().getBytes(), "utf-8");
		response.setHeader("Content-Disposition", "attachment;filename=\"" + fn + "\"");
		response.setContentLength(bytes.length);
		
		return bytes;
	}
}



3. jsp파일 구현하기

  • form태그로 파일을 입력받는다.
  • msg로 결과값을 출력해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
    <title>파일 다운로드</title>
</head>
 <body>
	<h3>파일 업로드</h3>
	<form action="upload" method="post" enctype="multipart/form-data">
	 	Select File : <input type="file" name="uploadFile" />
		 <button type="submit">Upload</button>
		 ${msg }
	</form>
	
	<h3>파일 다운로드</h3>
	<form action="download" method="post">
		<input type="hidden" name="filename" value="${fileName}">
		<input type="submit" value="다운로드">
	</form>
	
 </body>
</html>

 

 

 

반응형

댓글