티스토리 뷰
웹으로부터 원하는 형식의 파일만 받고 싶을 때, 당연히 서버에선 필터링을 해야 한다.
사실 프론트에서도 (아무리 양심이 없어도) 최소한 다음과 같이 Accept 형식 제한은 걸어놓을것이다.
아래와 같이 accept를 설정하면 첨부파일 선택화면에서 사진과 영상 파일만 보인다.
<input accept="image/*,video/*" class="d-none" id="file" name="file" type="file">
사실 이건 우측하단을 "모든 파일"로 선택하면 다른 형식의 파일도 보여 선택 가능하게 된다.
따라서 선택된 다른 형식의 파일을 서버로 submit하기 전에 한번더 원하는 형식의 파일인지 확인하는 JS 방법이 분명히 있을 것이고, 또는 애초에 input 태그대신 좀더 기능이 추가된 라이브러리도 있지않을까싶다.
프론트에서 1차적으로 확인하는 것이 물론 좋고 다들 그렇게 하고 있겠지만,
이번엔 서버에서 FilenameUtils (Apache Commons IO 2.5 API)를 이용해서 파일 확장자를 검사하는 방법을 사용해보았다.
dependency 추가
implementation 'commons-io:commons-io:2.5'
간단히 메소드 방식을 확인할 수 있다.
- 기본적으로 파일명이 들어오면, 확장자를 리턴
- 확장자가 없으면, empty string 리턴
- 확장자만 있으면, 점(.)을 뺀 확장자를 리턴
- 빈 문자열 or NULL이 들어오면, 들어온 값을 그대로 리턴
사실 FilenameUtils(Apache Commons IO 2.5 API)외에도 자바에서 파일의 확장자를 구하는 방법은 더 있다고 한다.
- 노가다
- FilenameUtils (Apache Commons IO)
- Guava의 getFileExtension()
일단 간단히 구현하긴 했는데, 이후는 알아서.
private static final List<String> EXTENSIONS_IMAGE = Arrays.asList("bmp", "gif", "jpg", "png", "jpeg");
private static final List<String> EXTENSIONS_VIDEO = Arrays.asList("mp4", "avi", "mov", "mpg", "wmv", "mpeg");
private void validateFileExtension(String fileName) {
fileName = FilenameUtils.getExtension(fileName.toLowerCase());
if (EXTENSIONS_IMAGE.contains(fileName) || EXTENSIONS_VIDEO.contains(fileName)) {
return;
}
throw new FileUploadException("유효하지않은 파일 형식입니다.");
}
'General, Java' 카테고리의 다른 글
Collection.stream().forEach() vs Collection.forEach() (0) | 2019.11.20 |
---|---|
Singleton vs Static class 차이점 (0) | 2019.09.14 |
DTO의 사용범위 / Entity와의 변환에 대한 논의 (0) | 2019.09.14 |
Java) toString()을 override하는 10가지 팁 (번역/요약) (0) | 2019.09.14 |
Dependency Injection (basic) (0) | 2019.09.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Data Structure
- 우아한 테크코스
- FRAGMENT
- queue
- webhacking.kr
- Stack
- Java
- sort
- brute-force
- Vo
- 해외여행
- JPA
- mysql
- C
- 프로그래머스
- 웹해킹
- Android
- javascript
- dfs
- 개발자
- reversing
- Android Studio
- bfs
- 회고
- 리버싱
- OneToMany
- Algorithm
- graph
- socket
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함