글 수정

저번 시간에는 글 수정을 누르고 기존 첨부된 파일에 대해 X버튼을 누르면 delFile이라는 이름에 등록되고, 없어진 그 자리에 새로운 파일을 업로드할 수 있게 만들었다.

이제 컨트롤러로 넘어가서 delFile에 해당하는 파일을 DB에서 지우고, 새로 업로드한 파일을 등록하는 기능을 구현하자.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	return mav;
}

우선 기존 DB에 등록되어있던 파일을 삭제시키는 작업을 해줘야한다. 삭제시킬 파일명을 가져올 Service와 쿼리문을 작성하자.

컨트롤러

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	return mav;
}

Service

package com.poby.myapp.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.poby.myapp.dao.DataDAO;
import com.poby.myapp.vo.DataVO;

@Service
public class DataServiceImpl implements DataService {
	@Inject
	DataDAO dao;

	@Override
	public int dataPostOk(DataVO vo) {
		return dao.dataPostOk(vo);
	}

	@Override
	public List<DataVO> dataList() {
		return dao.dataList();
	}

	@Override
	public DataVO dataView(int postno) {
		return dao.dataView(postno);
	}

	@Override
	public DataVO selectFilename(int postno) {
		return dao.selectFilename(postno);
	}
}

쿼리문

<select id="selectFilename" resultType="com.poby.myapp.vo.DataVO">
	SELECT filename1, filename2 FROM data_tbl WHERE postno=${param1}
</select>

그리고 컨트롤러에서 DB파일명, 삭제할 파일명, 새로 업로드할 파일명을 관리해줄 객체를 생성한다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	return mav;
}

이 List안에 삭제할 파일명을 담아주자.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	return mav;
}

여기까지 잘 실행되는지 테스트해보자. 콘솔에 delFile에 어떤 문자열이 들어가있는지 찍어봤다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	// 수정 form에서 삭제할 파일을 dbFile에서 제거하기
	if(vo.getDelFile()!=null) {	// 삭제할 파일이 있으면
		for(String delFile : vo.getDelFile()) {
			System.out.println("delFile -> " + delFile);
			dbFile.remove(delFile);
		}
	}
	
	mav.addObject("postno", vo.getPostno());
	mav.setViewName("redirect:dataEdit");
	
	return mav;
}

X를 누른 파일의 파일명이 콘솔에 제대로 찍히는걸 확인했다.

컨트롤러에서 서버에 파일을 업로드하자. 자료실 글 생성할때 했던 방법과 동일하다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	// 수정 form에서 삭제할 파일을 dbFile에서 제거하기
	if(vo.getDelFile()!=null) {	// 삭제할 파일이 있으면
		for(String delFile : vo.getDelFile()) {
			// System.out.println("delFile -> " + delFile);
			dbFile.remove(delFile);
		}
	}
	
	//-------------------파일 업로드--------------------
	List<MultipartFile> fileList = mr.getFiles("filename");
	List<String> uploadFileList = new ArrayList<String>();	// 새로 업로드한 파일명 관리
	
	if(fileList!=null) {	// 업로드할 파일이 있을 때
		// 파일 수 만큼
		for(int i=0; i<fileList.size(); i++) {
			MultipartFile mf = fileList.get(i);
			String file = mf.getOriginalFilename();	// 업로드한 원래 파일명
			if(file!=null && !file.equals("")){
				File f = new File(path, file);
				
				if(f.exists()) {	// 이미 파일명 존재하면
					for(int renameNum=1;;renameNum++) {	// 번호매기기
						int dot = file.lastIndexOf(".");
						String filename = file.substring(0, dot);
						String extension = file.substring(dot+1);	// 파일명, 확장자 분리
						
						String newFilename = filename+"("+renameNum+")."+extension;
						f = new File(path, newFilename);
						
						if(!f.exists()) {
							file = newFilename;
							break;
						}
					}
				}
				
				// 실제 업로드(새로운 파일명으로 업로드)
				try {
					mf.transferTo(new File(path, file));
				}catch(Exception e) {
					e.printStackTrace();
				}
				
				// dbFile과 uploadFileList에 등록
				uploadFileList.add(file);
				dbFile.add(file);	// DB 업데이트 시 필요
			}
		}
	}//--------------------파일 업로드 끝---------------------
	
	mav.addObject("postno", vo.getPostno());
	mav.setViewName("redirect:dataEdit");
	
	return mav;
}

dbFile과 uploadFileList에 담아놓은 수정 업로드할 파일의 이름인 file문자열을 add한다.
각각 DB업데이트 시 용도에 따라 쓰일 예정이다.

업로드될 파일 이름을 vo에 세팅한다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	// 수정 form에서 삭제할 파일을 dbFile에서 제거하기
	if(vo.getDelFile()!=null) {	// 삭제할 파일이 있으면
		for(String delFile : vo.getDelFile()) {
			// System.out.println("delFile -> " + delFile);
			dbFile.remove(delFile);
		}
	}
	
	//-------------------파일 업로드--------------------
	List<MultipartFile> fileList = mr.getFiles("filename");
	List<String> uploadFileList = new ArrayList<String>();	// 새로 업로드한 파일명 관리
	
	if(fileList!=null) {	// 업로드할 파일이 있을 때
		// 파일 수 만큼
		for(int i=0; i<fileList.size(); i++) {
			MultipartFile mf = fileList.get(i);
			String file = mf.getOriginalFilename();	// 업로드한 원래 파일명
			if(file!=null && !file.equals("")){
				File f = new File(path, file);
				
				if(f.exists()) {	// 이미 파일명 존재하면
					for(int renameNum=1;;renameNum++) {	// 번호매기기
						int dot = file.lastIndexOf(".");
						String filename = file.substring(0, dot);
						String extension = file.substring(dot+1);	// 파일명, 확장자 분리
						
						String newFilename = filename+"("+renameNum+")."+extension;
						f = new File(path, newFilename);
						
						if(!f.exists()) {
							file = newFilename;
							break;
						}
					}
				}
				
				// 실제 업로드(새로운 파일명으로 업로드)
				try {
					mf.transferTo(new File(path, file));
				}catch(Exception e) {
					e.printStackTrace();
				}
				
				// dbFile과 uploadFileList에 등록
				uploadFileList.add(file);
				dbFile.add(file);	// DB 업데이트 시 필요
			}
		}
	}//--------------------파일 업로드 끝---------------------
	// dbFile의 내용을 vo에 세팅
	for(int i=0; i<dbFile.size(); i++) {
		System.out.println("dbFile -> " + dbFile.get(i));
		if(i==0) vo.setFilename1(dbFile.get(i));
		if(i==1) vo.setFilename2(dbFile.get(i));
	}
	
	// DB 업데이트
	
	mav.addObject("postno", vo.getPostno());
	mav.setViewName("redirect:dataEdit");
	
	return mav;
}

filename1은 필수로 들어가고, filename2는 있을때만 등록하도록 조건문을 추가했다.

 

Service

package com.poby.myapp.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.poby.myapp.dao.DataDAO;
import com.poby.myapp.vo.DataVO;

@Service
public class DataServiceImpl implements DataService {
	@Inject
	DataDAO dao;

	@Override
	public int dataPostOk(DataVO vo) {
		return dao.dataPostOk(vo);
	}

	@Override
	public List<DataVO> dataList() {
		return dao.dataList();
	}

	@Override
	public DataVO dataView(int postno) {
		return dao.dataView(postno);
	}

	@Override
	public DataVO selectFilename(int postno) {
		return dao.selectFilename(postno);
	}

	@Override
	public int dataEdit(DataVO vo) {
		return dao.dataEdit(vo);
	}
}

쿼리문 생성

<update id="dataEdit">
	UPDATE data_tbl SET subject=#{subject}, content=#{content}, filename1=#{filename1}
	<choose>
		<when test="filename2!=null">
			, filename2=#{filename2}
		</when>
		<otherwise>
			. filename2=null
		</otherwise>
	</choose>
	WHERE postno=#{postno} AND username=#{username}
</update>

컨트롤러 모델&뷰

이제 여기서 두 가지 상황으로 나뉜다. 수정 성공했을때, 실패했을때.

새 자료 올리기와 다른 점은 성공했을땐 원래 있던 파일을 삭제해야하고, 실패했을때 원래 파일은 놔둔 채 수정할 파일을 삭제해야한다는 점이다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	// 수정 form에서 삭제할 파일을 dbFile에서 제거하기
	if(vo.getDelFile()!=null) {	// 삭제할 파일이 있으면
		for(String delFile : vo.getDelFile()) {
			// System.out.println("delFile -> " + delFile);
			dbFile.remove(delFile);
		}
	}
	
	//-------------------파일 업로드--------------------
	List<MultipartFile> fileList = mr.getFiles("filename");
	List<String> uploadFileList = new ArrayList<String>();	// 새로 업로드한 파일명 관리
	
	if(fileList!=null) {	// 업로드할 파일이 있을 때
		// 파일 수 만큼
		for(int i=0; i<fileList.size(); i++) {
			MultipartFile mf = fileList.get(i);
			String file = mf.getOriginalFilename();	// 업로드한 원래 파일명
			if(file!=null && !file.equals("")){
				File f = new File(path, file);
				
				if(f.exists()) {	// 이미 파일명 존재하면
					for(int renameNum=1;;renameNum++) {	// 번호매기기
						int dot = file.lastIndexOf(".");
						String filename = file.substring(0, dot);
						String extension = file.substring(dot+1);	// 파일명, 확장자 분리
						
						String newFilename = filename+"("+renameNum+")."+extension;
						f = new File(path, newFilename);
						
						if(!f.exists()) {
							file = newFilename;
							break;
						}
					}
				}
				
				// 실제 업로드(새로운 파일명으로 업로드)
				try {
					mf.transferTo(new File(path, file));
				}catch(Exception e) {
					e.printStackTrace();
				}
				
				// dbFile과 uploadFileList에 등록
				uploadFileList.add(file);
				dbFile.add(file);	// DB 업데이트 시 필요
			}
		}
	}//--------------------파일 업로드 끝---------------------
	// dbFile의 내용을 vo에 세팅
	for(int i=0; i<dbFile.size(); i++) {
		System.out.println("dbFile -> " + dbFile.get(i));
		if(i==0) vo.setFilename1(dbFile.get(i));
		if(i==1) vo.setFilename2(dbFile.get(i));
	}
	
	// DB 업데이트
	int result = service.dataEdit(vo);
	
	if(result>0){// 업데이트가 된 경우 -> 삭제파일이 있으면 지우기
		if(vo.getDelFile()!=null) {
			for(String file : vo.getDelFile()) {
				File f = new File(path, file);
				f.delete();
			}
		}
	}else{// 업데이트가 실패한 경우 -> 새로 업로드한 파일 지우기
		if(uploadFileList!=null) {
			for(String file : uploadFileList) {
				File f = new File(path, file);
				f.delete();
			}
		}
	}
	
	mav.addObject("postno", vo.getPostno());
	mav.setViewName("redirect:dataEdit");
	
	return mav;
}

성공했을 경우 삭제할 파일명을 담은 delFile로부터 파일명을 받아서 File객체 생성 후 서버에서 삭제했다.

실패했을 경우 수정 업로드할 파일명을 담은 uploadFileList로부터 파일명을 받아서 File객체 생성 후 서버에서 삭제했다.

삭제하는 과정의 형태가 거의 동일해서 별도의 메소드를 만들어 간략화하는 방법도 있다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	// 수정 form에서 삭제할 파일을 dbFile에서 제거하기
	if(vo.getDelFile()!=null) {	// 삭제할 파일이 있으면
		for(String delFile : vo.getDelFile()) {
			// System.out.println("delFile -> " + delFile);
			dbFile.remove(delFile);
		}
	}
	
	//-------------------파일 업로드--------------------
	List<MultipartFile> fileList = mr.getFiles("filename");
	List<String> uploadFileList = new ArrayList<String>();	// 새로 업로드한 파일명 관리
	
	if(fileList!=null) {	// 업로드할 파일이 있을 때
		// 파일 수 만큼
		for(int i=0; i<fileList.size(); i++) {
			MultipartFile mf = fileList.get(i);
			String file = mf.getOriginalFilename();	// 업로드한 원래 파일명
			if(file!=null && !file.equals("")){
				File f = new File(path, file);
				
				if(f.exists()) {	// 이미 파일명 존재하면
					for(int renameNum=1;;renameNum++) {	// 번호매기기
						int dot = file.lastIndexOf(".");
						String filename = file.substring(0, dot);
						String extension = file.substring(dot+1);	// 파일명, 확장자 분리
						
						String newFilename = filename+"("+renameNum+")."+extension;
						f = new File(path, newFilename);
						
						if(!f.exists()) {
							file = newFilename;
							break;
						}
					}
				}
				
				// 실제 업로드(새로운 파일명으로 업로드)
				try {
					mf.transferTo(new File(path, file));
				}catch(Exception e) {
					e.printStackTrace();
				}
				
				// dbFile과 uploadFileList에 등록
				uploadFileList.add(file);
				dbFile.add(file);	// DB 업데이트 시 필요
			}
		}
	}//--------------------파일 업로드 끝---------------------
	// dbFile의 내용을 vo에 세팅
	for(int i=0; i<dbFile.size(); i++) {
		System.out.println("dbFile -> " + dbFile.get(i));
		if(i==0) vo.setFilename1(dbFile.get(i));
		if(i==1) vo.setFilename2(dbFile.get(i));
	}
	
	// DB 업데이트
	int result = service.dataEdit(vo);
	
	if(result>0){// 업데이트가 된 경우 -> 삭제파일이 있으면 지우기
		fileDelete(vo.getDelFile(), path);
	}else{// 업데이트가 실패한 경우 -> 새로 업로드한 파일 지우기
		fileDelete(uploadFileList, path);
	}
	
	mav.addObject("postno", vo.getPostno());
	mav.setViewName("redirect:dataEdit");
	
	return mav;
}

// 파일 삭제 메소드
public void fileDelete(List<String> delFileList, String path) {
	if(delFileList!=null) {
		for(String file : delFileList) {
			File f = new File(path, file);
			f.delete();
		}
	}
}

실행 결과에 따라 이동시킬 뷰페이지 이름을 정해준다.

// 글 수정 올리기 페이지
@PostMapping("/data/dataEditOk")
public ModelAndView dataEditOk(HttpServletRequest req, DataVO vo) {
	ModelAndView mav = new ModelAndView();
	
	vo.setUsername((String)req.getSession().getAttribute("logUsername"));
	
	// 업로드 파일 위치, 파일 삭제 위치
	String path = req.getSession().getServletContext().getRealPath("/upload");
	
	// 파일 업로드 처리를 해줄 MultipartHttpServletRequest객체 생성
	MultipartHttpServletRequest mr = (MultipartHttpServletRequest) req;
	
	// DB에 등록되어 있는 수정 전 파일명 
	DataVO dbVO = service.selectFilename(vo.getPostno());
	
	// DB파일명, 삭제파일명, 새로 업로드한 파일명을 관리하기 위한 객체
	List<String> dbFile = new ArrayList<String>();
	
	// DB에서 읽어온 수정 전 파일명을 dbFile에 추가하기
	dbFile.add(dbVO.getFilename1());
	if(dbVO.getFilename2()!=null) dbFile.add(dbVO.getFilename2());
	
	// 수정 form에서 삭제할 파일을 dbFile에서 제거하기
	if(vo.getDelFile()!=null) {	// 삭제할 파일이 있으면
		for(String delFile : vo.getDelFile()) {
			// System.out.println("delFile -> " + delFile);
			dbFile.remove(delFile);
		}
	}
	
	//-------------------파일 업로드--------------------
	List<MultipartFile> fileList = mr.getFiles("filename");
	List<String> uploadFileList = new ArrayList<String>();	// 새로 업로드한 파일명 관리
	
	if(fileList!=null) {	// 업로드할 파일이 있을 때
		// 파일 수 만큼
		for(int i=0; i<fileList.size(); i++) {
			MultipartFile mf = fileList.get(i);
			String file = mf.getOriginalFilename();	// 업로드한 원래 파일명
			if(file!=null && !file.equals("")){
				File f = new File(path, file);
				
				if(f.exists()) {	// 이미 파일명 존재하면
					for(int renameNum=1;;renameNum++) {	// 번호매기기
						int dot = file.lastIndexOf(".");
						String filename = file.substring(0, dot);
						String extension = file.substring(dot+1);	// 파일명, 확장자 분리
						
						String newFilename = filename+"("+renameNum+")."+extension;
						f = new File(path, newFilename);
						
						if(!f.exists()) {
							file = newFilename;
							break;
						}
					}
				}
				
				// 실제 업로드(새로운 파일명으로 업로드)
				try {
					mf.transferTo(new File(path, file));
				}catch(Exception e) {
					e.printStackTrace();
				}
				
				// dbFile과 uploadFileList에 등록
				uploadFileList.add(file);
				dbFile.add(file);	// DB 업데이트 시 필요
			}
		}
	}//--------------------파일 업로드 끝---------------------
	// dbFile의 내용을 vo에 세팅
	for(int i=0; i<dbFile.size(); i++) {
		System.out.println("dbFile -> " + dbFile.get(i));
		if(i==0) vo.setFilename1(dbFile.get(i));
		if(i==1) vo.setFilename2(dbFile.get(i));
	}
	
	// DB 업데이트
	int result = service.dataEdit(vo);
	
	if(result>0){// 업데이트가 된 경우 -> 삭제파일이 있으면 지우기
		fileDelete(vo.getDelFile(), path);
		mav.addObject("postno", vo.getPostno());
		mav.setViewName("redirect:dataView");
	}else{// 업데이트가 실패한 경우 -> 새로 업로드한 파일 지우기
		fileDelete(uploadFileList, path);
		mav.setViewName("data/dataEditOk");
	}
	
	return mav;
}

수정 전:

수정 후:

업로드한 파일은 서버에 저장되고, 삭제한 파일은 서버에서 삭제된 것을 확인했다.

+ Recent posts