1. jsp
<div class="mb-3">
<input class="form-control" type="file" id="file" name="fBoardFile" multiple>
</div>
2. Controller
@RequestMapping(value="/board/write", method=RequestMethod.POST)
public String BoardWriteProc(Board board, List<MultipartFile> BoardFile, HttpSession session) {
freeBoard.setMemberNo( (int)session.getAttribute("member_no") );
freeBoardService.write(board, boardFile);
return "redirect:/Board/list";
}
3. Service
@Override
public void write(Board board, List<MultipartFile> BoardFile) {
boardDao.BoardInsert(board); // 게시글 등록
if(fBoardFile.size() <= 0) { return; } // 첨부된 파일이 없다면 return
// 파일의 size가 0이라면 return
for(int i=0; i<fBoardFile.size(); i++) {
if(fBoardFile.get(i).getSize() <= 0) {
return;
}
}
// 첨부파일 처리
String path = context.getRealPath("upload"); // 서버 경로를 이용하여 upload 폴더를 알아낸다.
File folder = new File( path ); // 파일을 저장할 폴더 객체
// 만약 폴더가 없다면 생성하기
if( !folder.exists() ) {
folder.mkdir();
}
List<Map<String, String>> fileList = new ArrayList<>();
// 파일이 저장될 이름
for(int i=0; i<fBoardFile.size(); i++) {
String originName = fBoardFile.get(i).getOriginalFilename();
String storedName = originName + UUID.randomUUID().toString().split("-")[1];
Map<String, String> map = new HashMap<>();
map.put("originName", originName);
map.put("storedName", storedName);
fileList.add(map);
}
// 저장할 파일의 정보 객체
for(int i=0; i<BoardFile.size(); i++) {
File dest = new File( folder, fileList.get(i).get("storedName"));
try {
BoardFile.get(i).transferTo(dest);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 첨부파일 정보 DB 기록
FileUpload fileUpload = new FileUpload();
fileUpload.setBoardNo(board.getBoardNo());
fileUpload.setFileUploadOri(fileList.get(i).get("originName"));
fileUpload.setFileUploadStor(fileList.get(i).get("storedName"));
boardDao.insertFile(fileUpload);
}
}