파일첨부_다중파일 첨부 및 마무리
by 볼빵빵오춘기board2save.html
- input태그에 multiple 속성을 추가한다.
- multiple은 여러 개 파일을 올릴 수 있도록 해준다.
file: <input type="file" name="boardFile" multiple> <br>
board2DTO
MultipartFile이었던 타입을 LIst로 변경하여 여러 파일을 담을 수 있도록 한다.
private List<MultipartFile> boardFile; // save.html -> Controller 파일 담는 용도
board2Service
- 부모 데이터가 먼저 저장이 되야하므로 작성했던 코드에서 아래코드부분을 위로 옮긴다.
Board2Entity board2Entity = Board2Entity.toSaveFileEntity(boardDTO);
Long saveId = board2Repository.save(board2Entity).getId();
Board2Entity board2 = board2Repository.findById(saveId).get();
- for(MultipartFile boardFile: boardDTO.getBoardFile()){ 에서 boardDTO.getBoardFile()이 List 타입이기 때문에 for문을 통해 반복해서 넣어준다.
Board2Entity board2Entity = Board2Entity.toSaveFileEntity(boardDTO);
Long saveId = board2Repository.save(board2Entity).getId();
Board2Entity board2 = board2Repository.findById(saveId).get();
for(MultipartFile boardFile: boardDTO.getBoardFile()){
// MultipartFile boardFile = boardDTO.getBoardFile(); // 1
String originalFilename = boardFile.getOriginalFilename();// 2
String storedFileName = System.currentTimeMillis() + "_" + originalFilename; // 3
String savePath = System.getProperty("user.dir")+"/src/main/resources/static/files/"+storedFileName; // 4
boardFile.transferTo(new File(savePath)); // 5
BoardFileEntity boardFileEntity = BoardFileEntity.toBoardFileEntity(board2, originalFilename, storedFileName);
boardFileRepositoy.save(boardFileEntity);
}
board2DTO
- 여러 개의 파일을 가져오므로 boardFile, originalFileName, storedFileName을 List로 가져올 수 있도록 한다.
private List<MultipartFile> boardFile; // save.html -> Controller 파일 담는 용도
private List<String> originalFileName; // 원본 파일 이름
private List<String> storedFileName; // 서버 저장용 파일 이름
- 여러개의 파일의 원본과 저장이름도 Controller에도 List문을 for문으로 돌려서 setter해줘야한다.
}else{
List<String> orginalFileNameList = new ArrayList<>();
List<String> storedFileNameList = new ArrayList<>();
board2DTO.setFileAttached(board2Entity.getFileAttached());
// 파일 하나만 가져올 때
/*
board2DTO.setOriginalFileName(board2Entity.getBoardFileEntityList().get(0).getOriginalFileName());
board2DTO.setStoredFileName(board2Entity.getBoardFileEntityList().get(0).getStoredFileName());
*/
// 파일 여러개 가져올 때
for(BoardFileEntity boardFileEntity: board2Entity.getBoardFileEntityList()){
orginalFileNameList.add(boardFileEntity.getOriginalFileName());
storedFileNameList.add(boardFileEntity.getStoredFileName());
}
board2DTO.setOriginalFileName(orginalFileNameList);
board2DTO.setStoredFileName(storedFileNameList);
}
board2detail.html
이미지 파일도 여러개이기때문에 td태그에 반복문을 돌려서 보이도록 한다.
<tr th:if="${board.fileAttached == 1}">
<th>image</th>
<!-- 파일 하나 일 경우-->
<!-- <td>-->
<!-- <img th:src="@{|/upload/${board.storedFileName}|}" alt="">-->
<!-- <img th:src="|/files/${board.storedFileName}|" alt="" width="100%" height="auto">-->
<!-- </td>-->
<!-- 파일이 여러 개일 경우 -->
<td th:each="fileName: ${board.storedFileName}">
<img th:src="|/files/${fileName}|" alt="" width="100%" height="auto">
</td>
</tr>
'강의 따라하기 > member2' 카테고리의 다른 글
댓글처리_댓글작성 내용 서버로 요청하기 (0) | 2023.12.30 |
---|---|
댓글처리_댓글 기능 소개 (0) | 2023.12.30 |
파일첨부_파일첨부 완료 후 게시글 조회시 이미지 출력 (0) | 2023.12.30 |
파일첨부_게시글 및 파일이름 DB 저장 처리 (0) | 2023.12.29 |
파일첨부_파일이름 저장 Entity 설계 및 참조관계 (0) | 2023.12.29 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기