/** 업로드 파일 삭제
*/
@PostMapping("/removeFile")
public ResponseEntity<Boolean> removeFile(String fileName){
String srcFileName = null;
try{
srcFileName = URLDecoder.decode(fileName,"UTF-8");
//UUID가 포함된 파일이름을 디코딩해줍니다.
File file = new File(uploadPath +File.separator + srcFileName);
boolean result = file.delete();
File thumbnail = new File(file.getParent(),"s_"+file.getName());
//getParent() - 현재 File 객체가 나태내는 파일의 디렉토리의 부모 디렉토리의 이름 을 String으로 리턴해준다.
result = thumbnail.delete();
return new ResponseEntity<>(result,HttpStatus.OK);
}catch (UnsupportedEncodingException e){
e.printStackTrace();
return new ResponseEntity<>(false,HttpStatus.INTERNAL_SERVER_ERROR);
}
}
<div>
로 묶는 작업이 필요합니다. // 추가
// Ajax 업로드 이후 이미지들을 호출하는 함수
function showUploadedImage(arr){
console.log(arr);
var divArea = $(".uploadResult");
var str = "";
for(var i =0; i<arr.length; i++){
str += "<div>";
str += "<img src='/display?fileName="+arr[i].thumbnailURL+"'>";
str += "<button class='removeBtn' data-name='"+arr[i].imageURL+"'>Remove</button>";
str += "</div>";
}
divArea.append(str);
<div>
태그를 생성하고, <img>
,<button>
태그를 <div>
안쪽으로 추가합니다.<button>
태그는 'data-name'이라는 커스텀 속성을 지정해서 버튼을 클릭했을 때 삭제해야 하는 파일의 이름을 알아내는 용도로 사용합니다. $(".uploadResult").on("click",".removeBtn",function(e){
var target = $(this);
var fileName = target.data("name");
var targetDiv = $(this).closest("div");
console.log(target);
console.log(fileName);
console.log(targetDiv);
$.post('/removeFile',{fileName : fileName}, function(result){
console.log(result);
if(result === true){
targetDiv.remove();
}
})
})
<div>
는 동적으로 생성되기 때문에 바로 클릭 이벤트 처리를 할 수 없으므로, 위임(delegate)하는 방식으로 이벤트를 처리해야 합니다.<div>
를 삭제합니다.File 객체를 써보고 공부해보니 File객체를 생성하는 방법이 여러개가 있어서 정리해 보았습니다.
- getName() : 경로를 제외한 파일의 이름. 즉, 경로의 가장 마지막 부분을 String 객체로 리턴합니다.
- getPath() : 파일이나 디렉토리 이름을 포함한 File 객체의 경로를 String으로 리턴합니다.