필요 라이브러리 추가
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 생성
jsDelivr - A free, fast, and reliable CDN for JS and Open Source
Optimized for JS and ESM delivery from npm and GitHub. Works with all web formats. Serving more than 150 billion requests per month.
www.jsdelivr.com
위 사이트에서 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 |