설명
이미 업로드된 파일은 가상 파일을 사용하여 표현할 수 있으며, 해당 파일의 고유한 키를 vindex 속성을 사용하여 등록한다.
즉 기존 파일을 삭제한다는 것은 가상 파일 삭제를 의미한다.
앞의 "폼 전송" 예제와 똑같지만, submit 시점에 삭제된 가상 파일 정보를 함께 전달해 주어야 하는 차이가 있다.
function submit(response) {
var formObj = document.getElementsByTagName("form")[0];
formObj.newFileKeys.value = response || "";
// 삭제된 가상 파일 배열을 얻는다.
var arr = dx5.get("dext5").getRemovedFiles();
// vindex;vindex;... 형식의 문자열을 생성하여 등록한다.
var deleted = arr.map(function(v) { return v.vindex; }).join(";");
formObj.deleteFileKeys.value = deleted || "";
formObj.submit();
}
서버 측에서 최종적으로 폼 데이터를 처리할 때, 삭제된 파일에 대한 처리도 함께 해주는 것이 좋다.
@RequestMapping(value = "/service/form-process.do", method = RequestMethod.POST)
public String formprocess(..., @RequestParam(value = "deleteFileKeys", required = false) String deleteFileKeys, ...) {
if (deleteFileKeys != null) {
// 예제에서는 단순히 파일 삭제 유무만 설정했지만,
// 일반적으로는 연관된 DB 파일 테이블에서 대상 파일 정보를 삭제해야 합니다.
}
...
if (deleteFileKeys != null) {
// 실제 서버에 업로드된 물리적 파일을 삭제하는 과정은 모든 트랜잭션이 끝난 시점에 이루어지는 것이 안전합니다.
}
...
}.