설명
이미 업로드된 파일은 가상 파일을 사용하여 표현할 수 있으며, 해당 파일의 고유한 키를 vindex 속성을 사용하여 등록한다.
즉 기존 파일을 삭제한다는 것은 가상 파일 삭제를 의미한다.
앞의 "폼 전송" 예제와 똑같지만, submit 시점에 삭제된 가상 파일 정보를 함께 전달해 주어야 하는 차이가 있다.
function submit(response) {
var dx = dx5.get("dext5");
document.querySelector("input[name='nfiles']").value = response || "";
// 남은 가상 파일의 배열을 얻어 vindex;vindex;... 형식의 문자열을 생성하여 등록한다.
document.querySelector("input[name='ofiles']").value = dx.getItems(false).filter(function (v) { return v.type == "VIRTUAL"; }).map(function (v) { return v.vindex; }).join(";");
// 삭제된 가상 파일의 배열을 얻어 vindex;vindex;... 형식의 문자열을 생성하여 등록한다.
document.querySelector("input[name='dfiles']").value = dx.getRemovedFiles().map(function (v) { return v.vindex; }).join(";");
document.querySelector("form").submit();
}
서버 측에서 최종적으로 폼 데이터를 처리할 때, 삭제된 파일에 대한 처리도 함께 해주는 것이 좋다.
...
var dkeys = context.Request.Form["dfiles"];
if (!string.IsNullOrWhiteSpace(dkeys))
{
// 예제에서는 단순히 파일 삭제 유무만 설정했지만,
// 일반적으로는 연관된 DB 파일 테이블에서 대상 파일 정보를 삭제해야 한다.
}
...
if (!string.IsNullOrWhiteSpace(dkeys))
{
// 실제 서버에 업로드된 물리적 파일을 삭제하는 과정은 모든 트랜잭션이 끝난 시점에 이루어지는 것이 안전하다.
}
...