해당 글은 공부하는 과정을 기록하기 위한 포스팅이며 다음 글을 통해 계속해서 수정이 이루어 질 예정입니다.
완성된 코드가 아니며, 오류가 발생할 수 있으니 복사 및 참고 용으로 사용하지 않기를 권장합니다.


진행 목표

  • 사진 첨부 기능 (페이지상 구축)
  • DB 반영 체크
  • 저장 목록 페이지 반영
  • 사진 다운로드 기능
  • 1개 게시물 다중 사진 업로드
  • 앨범형 게시판목록


지난 과정에서 만든 폼 값을 action 태그를 넘겨주었다고 가정할 때 넘어온 정보를 처리할 페이지.
출력이 아닌 처리기능을 담당하는 영역이기에 자바 코드로 작성된다.


	String saveDirectory = application.getRealPath("/Uploads");
	int maxPostSize = 1024 * 1000;
	String encoding = "utf-8";
  • application.getRealPath(“/폴더명”)
    파일이 저장될 디렉토리.
    절대경로를 지정 할 경우 여러 사용자가 사용할때 각자의 경로가 달라
    설정을 수정해주어야 하는 불편함이 있기에 application 기본객체를 사용해서 경로를 가지고 옴.
    어플리케이션에서 매개변수로 경로값을 주면 절대 경로를 String 타입으로 반환함

  • int maxPostSize = 1024 * 1000
    향후 사용하기 위해 파일 최대용량을 미리 지정함. 1MB

  • String encoding = “utf-8”
    향후 사용하기 위해 인코딩 형식을 미리 지정함. utf-8

          MultipartRequest mr = new MultipartRequest(request, saveDirectory, maxPostSize, encoding);
    		
          String fileName = mr.getFilesystemName("attachedfile");
          String ext = fileName.substring(fileName.lastIndexOf("."));
          String now = new SimpleDateFormat("yyyyMMdd_HmsS").format(new Date());
          String newFileName = now + ext;
    		
       	File oldFile = new File(saveDirectory + File.separator + fileName);
          File newFile = new File(saveDirectory + File.separator + newFileName);
    		
          oldFile.renameTo(newFile);
    
  • MultipartRequest (HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy)
    request : request 객체
    saveDirectory : 저장 될 서버 경로
    maxPostSize: 저장 될 파일의 최대 크기
    FileRenamePolicy : 파일명의 중복 방지
    (경로와 최대크기는 위에서 미리 지정해둔 변수를 이용했다.)

  • getFilesystemName(“”)
    위에서 생성한 MultipartRequest의 메소드. 폼값에서 넘겨준 name값으로 전체 파일명을 가지고 옴

  • fileName.substring(fileName.lastIndexOf(“.”))
    전체 파일명에서 마지막 .을 기준으로 나누어 파일의 확장자만 얻음

  • new SimpleDateFormat(“yyyyMMdd_HmsS”).format(new Date())
    새로운 파일명을 시간대로 지정해주기 위해 현재시간의 date 타입을 가져와 String으로 저장

  • new File(saveDirectory + File.separator + fileName)
    File 속성을 이용해 저장디렉토리에 있는 파일을 객체로 저장함

  • new File(saveDirectory + File.separator + newFileName)
    변경하고자 하는 파일명으로도 File 객체를 생성함. 해당 디렉토리에는 아직 새로운 이름의 파일이 없기에 null값으로 생성됨

  • File.separator
    OS 마다 파일 구분자가 다름. (윈도우는 \, 리눅스는 /). File.separator를 이용하면 실행되고 있는 OS에 해당된 구분자를 리턴함

  • oldFile.renameTo(newFile)
    저장된 파일의 이름을 임시로 만들어 두었던 객체(변경하고자 하는 이름)의 이름으로 바꿈


    여기까지 파일을 저장하고 이름을 원하는 형식으로 바꾸는 것까지 진행 됨
    아래로는 파일 이외의 다른 값을 처리함.

    String name = mr.getParameter("name");
    String title = mr.getParameter("title");
    String[] cateArray = mr.getParameterValues("cate");
    
  • 카테고리는 다중 선택을 허용하는 형식이었기에 Array 형식 사용해서 파라미터를 가져와 출력함
    (출력 부분은 단순 출력이기에 기술을 생략함)

MyFileDTO dto = new MyFileDTO();
	dto.setName(name); 
	...동일한 방식의 dto 저장부분 생략
	
	MyFileDAO dao = new MyFileDAO();
	dao.insertFile(dto);
	dao.close();

	response.sendRedirect("fileList.jsp");
  • DTO 클래스의 객체를 새로 만들어 상기 추출된 값들을 하나씩 저장해줌

  • DAO 클래스의 객체 또한 새로 만들어 insertFile 메서드를 불러옴
    위에서 생성한 dto를 넣어 해당페이지에서 취합된 값들이 데이터로 추가될수있게 해줌

Updated: