Spring(FileUpload)_01

2025. 2. 6. 17:30·Spring, Boot/기초 내용 정리

2025-02-05

 

 

 

 

 

		<!-- 스프링 첨부파일 관련 commons-fileupload 라이브러리 -->
		<dependency>
		    <groupId>commons-fileupload</groupId>
		    <artifactId>commons-fileupload</artifactId>
		    <version>1.5</version>
		</dependency>		
		
		<!-- 스프링 첨부파일 관련 commons-io 라이브러리 -->
		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>2.11.0</version>
		</dependency>

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<!-- 스프링 설정과 관련된 파일 설정 공간 -->
	
	<!-- 파일 업로드 관련 설정 작업 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxInMemorySize" value="10485760" />	<!-- 10MB -->
		<property name="defaultEncoding" value="UTF-8" />
	</bean>
</beans>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div align="center">
		<hr width="30%" color="gray">
			<h3>파일 업로드 폼 페이지</h3>
		<hr width="30%" color="gray">
		<br> <br>
		
		<%-- input type이 "file"이라면 method는 무조건 "post"방식으로 하고 enctype="multipart/form-data" 입력 --%>
		<form method="post" enctype="multipart/form-data" 
				action="<%=request.getContextPath() %>/upload_ok.go">
			<table border="1" width="400">
				<tr>
					<th>첨부파일 1</th>
					<td><input type="file" name="file1"></td>
				</tr>
				
				<tr>
					<th>첨부파일 2</th>
					<td><input type="file" name="file2"></td>
				</tr>
				
				<tr>
					<th>첨부파일 3</th>
					<td><input type="file" name="file3"></td>
				</tr>
				
				<tr>
					<td colspan="2" align="center">
						<input type="submit" value="파일전송">&nbsp;&nbsp;&nbsp;
						<input type="reset" value="다시작성">
					</td>
				</tr>
			</table>
		</form>
	</div>

</body>
</html>

 

package com.spring.fileupload;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
public class UploadController {

	@Autowired
	private Upload upload;
	
	
	@RequestMapping("upload.go")
	public String upload() {
		return "upload_form";
	}
	
	
	// MultipartHttpServletRequest : 첨부파일이 여러 개인 경우
	@RequestMapping("upload_ok.go")
	public String uploadOk(Model model, MultipartHttpServletRequest mRequest) {
		if (this.upload.fileUpload(mRequest)) {
			model.addAttribute("result", "파일 업로드 성공");
		} else {
			model.addAttribute("result", "파일 업로드 실패");
		}
		
		return "upload_result"; 
	}
}

 

package com.spring.fileupload;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Iterator;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Service
public class Upload {

	public boolean fileUpload(MultipartHttpServletRequest mRequest) {
		
		boolean isUpload = false;
		String uploadPath = "D:\\NCS\\workspace(spring)\\12_FileUpload\\src\\main\\webapp\\resources\\upload\\";
		
		Calendar cal = Calendar.getInstance();
		
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH) + 1;
		int day = cal.get(Calendar.DAY_OF_MONTH);
		
		Iterator<String> iterator = mRequest.getFileNames();
		
		while (iterator.hasNext()) {
			String uploadFileName = iterator.next();
			System.out.println("uploadFileName >>> " + uploadFileName);
			
			MultipartFile mFile = mRequest.getFile(uploadFileName);
			
			// getOriginalFilename() : 업로드 되는 파일에서 확장자를 포함한 파일의 이름을 반환해주는 메서드.
			String originalFileName = mFile.getOriginalFilename();
			System.out.println("originalFileName >>> " + originalFileName);
			
			// 실제로 폴더를 만들어 보자
			// .......\\resources\\upload\\2025-02-05
			String homeDir = uploadPath + year + "-" + month + "-" + day;
			
			File path1 = new File(homeDir);
			
			if (!path1.exists()) {
				path1.mkdirs();	// 실제로 폴더를 만들어 주는 메서드
			}
			// 파일을 만들어 보자
			String saveFileName = originalFileName;
			
			// 파일명 중복 방지 작업
			if (!saveFileName.equals("")) {
				saveFileName = System.currentTimeMillis() + "_" + saveFileName;
				
				File origin = new File(homeDir + "/" + saveFileName);
				
				try {
					// transferTo() : 실제로 파일 데이터를 지정한 폴더에 저장시키는 메서드
					mFile.transferTo(origin);
					
					isUpload = true;
				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		} // while 문 end
		
		return isUpload;
	}
}

'Spring, Boot > 기초 내용 정리' 카테고리의 다른 글

Spring(AOP)_01  (0) 2025.02.06
Spring(AOP)_00  (0) 2025.02.06
Spring(MyBatis)_04  (0) 2025.02.05
Spring(MyBatis)_03  (0) 2025.02.05
Spring(MyBatis)_02  (0) 2025.02.05
'Spring, Boot/기초 내용 정리' 카테고리의 다른 글
  • Spring(AOP)_01
  • Spring(AOP)_00
  • Spring(MyBatis)_04
  • Spring(MyBatis)_03
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Spring(FileUpload)_01
상단으로

티스토리툴바