게시판 다중 첨부파일 등록

my_mon·2022년 12월 5일
0

1. jsp

<div class="mb-3">
	<input class="form-control" type="file" id="file" name="fBoardFile" multiple>
</div>
  • input 태그에서 multiple을 지정해주면 다중 첨부파일이 가능하다.

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";
	}
  • 다중 첨부파일 이므로 서버단으로 받아올 때 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);
		}
		
		
	}
  • 다중파일 이므로 파일이 저장될 이름이나, 저장할 파일의 객체를 for문을 이용하여 처리해야 한다.
profile
기록하는 사람

0개의 댓글