필요 라이브러리 추가
Maven Repository: commons-fileupload » commons-fileupload » 1.5
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
Maven Repository: commons-io » commons-io » 2.11.0
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
pom.xml
Controller >> FileController 생성
views/fileUpload.jsp 생성
위 사이트에서 Download → Other CDNs → jsDelivr CDN → Copy HTML
FileController
servlet-context.xml
maxUploadSize : 최대 사이즈. byte 형태로 사이즈 나타내면됨
maxInMemorySize : 임시메모리 공간
defaultEncoding : 인코딩 설정
Controller
map 추가
D:\springupload 생성 후
package com.itwillbs.controller;
import java.io.File;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Controller
public class FileController {
private static final Logger logger = LoggerFactory.getLogger(FileController.class);
// <http://localhost:8088/fileUpload>
@RequestMapping(value = "/fileUpload",method = RequestMethod.GET)
public void fileUploadFormGET() throws Exception{
logger.debug(" fileUploadFormGET() 실행 ");
logger.debug(" fileUpload.jsp 뷰페이지 연결 ");
}
@RequestMapping(value = "/upload",method = RequestMethod.POST)
public String fileUploadPOST(MultipartHttpServletRequest multiRequest,
Model model) throws Exception{
logger.debug(" fileUploadPOST() - 파일 업로드 처리 ");
// 파일업로시 전달된 모든정보를 저장
// logger.debug(""+multiRequest);
Map paramMap = new HashMap();
// 파일 정보를 제외한 모든 파라메터의 이름을 가져오기
Enumeration enu = multiRequest.getParameterNames();
while(enu.hasMoreElements()) {
String name = (String)enu.nextElement();
String value = multiRequest.getParameter(name);
//logger.debug("name : "+name+", value : "+value);
paramMap.put(name, value);
}
logger.debug(" paramMap : "+paramMap);
// 파일 정보를 저장
List fileList = fileProcess(multiRequest);
paramMap.put("fileList", fileList);
logger.debug(" paramMap : "+paramMap);
// => 추가동작 디비에 전달해서 저장
model.addAttribute("paramMap", paramMap);
return "fileResult";
}// fileUploadPOST
// 파일정보(이름)을 저장, 파일업로드 처리
private List<String> fileProcess(MultipartHttpServletRequest multiRequest) throws Exception{
// 파일의 이름을 저장
List<String> fileList = new ArrayList<String>();
// 폼태그에서 전달된 파일의 정보를 받아오기
// (input태그 file의 이름을 모두 가져오기)
Iterator<String> fileNames = multiRequest.getFileNames();
while(fileNames.hasNext()) {
// 파라메터 이름을 저장
String fileName = fileNames.next();
logger.debug(" fileName : "+fileName);
// 전달된 파일이름에 해당하는 MultipartFile정보 저장
MultipartFile mFile = multiRequest.getFile(fileName);
String oFileName = mFile.getOriginalFilename();
logger.debug(" oFileName : "+oFileName);
// 업로드된 실제 파일의 이름을 저장
fileList.add(oFileName);
// 실제 폴더 생성
File file = new File("D:\\\\springupload\\\\"+oFileName);
// 파일업로드
if(mFile.getSize() != 0) { //첨부파일이 있을때
if(!file.exists()) { // 파일,디렉터리(폴더)가 존재하는지 체크
if(file.getParentFile().mkdirs()) {
file.createNewFile();
}
}// exists
mFile.transferTo(file);
}// getSize
}//while
return fileList;
}
}//controller
fileResult.jsp - 출력결과페이지 생성
다시 업로드하기 링크 추가
파일명에 다운로드 링크 추가
'spring · spring boot' 카테고리의 다른 글
[spring] 파일 썸네일 만들기 (0) | 2023.12.22 |
---|---|
[spring] 파일 다운로드 (1) | 2023.12.22 |
[spring] 전체글 개수 조회 (0) | 2023.12.22 |
[Spring] 페이징 처리 (2) 하단부에 페이지 블럭 생성 (1) | 2023.12.22 |
[Spring] 페이징 처리 (1)원하는 만큼 데이터 출력 (0) | 2023.12.22 |