파일 업로드 방식
1. <form> 태그를 이용하는 방식 : 브라우저의 제한이 없어야 하는 경우에 사용
- 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방식
- <iframe>을 이용해서 화면의 이동 없이 첨부파일을 업로드 하는 방식
2. Ajax를 이용하는 방식 : 첨부파일을 별도로 처리하는 방식
- <input type='file'>을 이용하고 Ajax로 처리하는 방식
- HTML5의 Drag And Drop 기능이나 jQuery 라이브러리를 이용해서 처리하는 방식
서버에서의 주의사항
- 어떤 종류의 라이브러리나 API등을 활용할 것인지
o cos.jar : 2002년도 이후에 개발이 종료되었으므로, 더 이상 사용하는 것을 권장하지 않음
o commons-fileupload : 가장 일반적으로 많이 활용되고, 서블릿 스펙 3.0 이전에도 사용 가능
o 서블릿 3.0 이상 : 3.0 이상부터는 자체적인 파일 업로드 처리가 API 상에서 지원
파일 업로드에서 고려해야 하는 점들
- 동일한 이름으로 파일이 업로드 되었을 때 기존 파일이 사라지는 문제
- 이미지 파일의 경우에는 원본 파일의 용량이 큰 경우 섬네일 이미지를 생성해야 하는 문제
- 이미지 파일과 일반 파일을 구분해서 다운로드 혹은 페이지에서 조회하도록 처리하는 문제
- 첨부파일 공격에 대비하기 위한 업로드 파일의 확장자 제한
첨부파일 삭제
- 이미지 파일의 경우에는 섬네일까지 같이 삭제되어야 함
- 파일을 삭제한 후에는 브라우저에서도 섬네일이나 파일 아이콘이 삭제되도록 처리해야 함
- 비정상적으로 브라우저의 종료 시 업로드된 파일의 처리
게시물 조회
- 게시물을 조회 할 때 join처리해서 한꺼번에 게시물과 첨부파일의 정보를 같이 처리하는 방식
(데이터베이스를 한 번만 호출하게 되므로 효율적이지만 MyBatis 쪽에서 처리해야 하는 일이 많아짐)
- JSP에서 첨부파일의 정보를 Ajax를 이용해서 처리하는 방식
(다시 쿼리를 처리해야 하는 불편함이 있집만 난이도가 낮고, 화면에서 처리는 JavaScript 처리가 복잡)
ㅁ 전통적인 방식 : 테이블을 join해서 한번의 호출로 처리하는 방식(쿼리를 한번만 호출해 DB의 부하를 줄여줌)
게시물의 삭제
- 게시물의 내용과 게시물에 포함된 첨부파일을 같이 삭제 해야함
- 단순 DB상이 아닌 실제 저장된 파일의 삭제도 필요
'프로그래밍 > 오류 및 기타' 카테고리의 다른 글
[git 업로드 Error]LF will be replaced by CRLF in pom.xml. (0) | 2021.04.26 |
---|---|
ORA-28001 : the password has expired (패스워드 만료) (0) | 2021.04.23 |
[Github] Updates were rejected because the remote contains work that you do (0) | 2020.12.24 |
java.sql.SQLException: 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949 (0) | 2020.12.11 |
Tomcat 오류( Could not delete xxx, May be locked by another process) (0) | 2020.11.01 |