티스토리 뷰
- 전제
테이블 구조로 뿌려진 row들을 각각 for문 돌려서 FormData 에 담고, 그것을 java단에서 꺼내어 for문으로 하나씩 update 시킴 (텍스트, 파일 모두)
- 문제상황
파일을 첨부하지 않은 input type file 인 row에 대한 undefined 가 java단으로 넘어가며 null exception을 발생시키던 상황
- 해결방법
파일을 첨부하지 않은 input type file 에 대해, "none_file" 이라는 이름을 가진 file 객체를 새로 정의하고, 실제 java단에서 해당 정보를 update 하기 전에 파일명이 "none_file" 인 상황에서는 업로드 제외 시킴
---------------------------------------------------------------------------------------------------------------------------------------------------
1. html
<table id="tbCurriculum">
<thead>
<tr>
<th>번호</th>
<th>파일첨부</th>
</tr>
</thead>
<tbody>
<tr th:each="curriculum : ${curriculumList}">
<td>
<p th:text="${curriculum.curriculum_number}" th:data-curriculum_number="${curriculum.curriculum_number}"></p>
</td>
<td>
<input type="text" th:id=|${curriculum.curriculum_number}_insFileCurriculum| placeholder="" class="form-control" readonly="readonly">
<input type="file" th:id="|${curriculum.curriculum_number}_fileCurriculum|" th:name="|${curriculum.curriculum_number}_fileCurriculum|" />
<label th:for="|${curriculum.curriculum_number}_fileCurriculum|" class="btn btn-info btn-small">파일 선택</label>
<a th:href="|${curriculum.curriculum_upload_file_url}${curriculum.curriculum_upload_file_save_name}|" th:text="${curriculum.curriculum_upload_file_org_name}" target='_blank'></a>
</td>
</tr>
</tbody>
</table>
2. js단
var objFormData = new FormData();
// 총 갯수 확인
var totalCnt = 0;
$("#tbCurriculum").find("tbody tr").each(function(i) {
var curriculumnNo = $(this).find("td:eq(0) p").data("curriculum_number");
var curriculumnFile = $("#"+curriculumnNo+"_fileCurriculum")[0].files[0];
// 파일첨부를 하지 않은 file input 처리 (파일명이 none_file 인 파일을 임의 생성하여 업로드 제외 처리 시킴)
if(typeof curriculumnFile == 'undefined'){
curriculumnFile = new File(["test"], "none_file", {
type: "text/plain",
});
}
objFormData.append("curriculum_list["+i+"].curriculum_number",curriculumnNo);
objFormData.append("fileCurriculums",curriculumnFile);
totalCnt++;
});
objFormData.append("totalCnt", totalCnt);
3. controller 단
public ModelAndView curriculumUpdateAct(@RequestParam Map curriculumMap, MultipartFile fileCurriculums[], SessionInfo sessionInfo) throws Exception {
int totalCnt = Integer.parseInt(curriculumMap.get("totalCnt").toString());
for(int i=0; i<totalCnt; i++){
service.curriculumUpdateAct(curriculumMap, fileCurriculums[i]);
}
}
4. service 단
public void curriculumUpdateAct(Map curriculum, MultipartFile fileCurriculum) throws Exception {
...중략...
//파일첨부를 하지 않은 row에 대해서는, 파일명이 none_file 인 파일을 임의 생성하여 업로드 제외 처리 시킴
if(!"none_file".equals(fileCurriculum.getOriginalFilename())){
body.add("curriculum_file", fileCurriculum.getResource());
}
...중략...
}
'Web' 카테고리의 다른 글
<select> 태그 multiple로 다중 선택하고, DB에 저장한 값 가져와서 셋팅하기 (0) | 2023.12.22 |
---|---|
json 데이터 뽑아오기 (0) | 2022.10.18 |
경로 (0) | 2022.03.29 |
ajax file upload (multipart/form-data) (0) | 2019.06.05 |
네아로 '네이버에 등록된 서비스 설정에 오류가 있는 경우 해당 서비스에서 수정이 필요합니다.' 에러 (1) | 2018.05.14 |
댓글