티스토리 뷰

- 전제

테이블 구조로 뿌려진 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());
    }
    
    ...중략...
    
}

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함