특정 파일 확장자를 선택할 때, input의 accept가 주는 함정

2024. 8. 27. 15:13·그날의 배움

기존에 pdf 파일 첨부만 가능하게 구현된 feature에서

image 파일도 파일 첨부가 가능하도록 처리해달라는 티켓이 생성되었습니다.

화요일 티켓은 아주 달구나라고 생각하며 임했는데, 허를 찔렸습니다.


1) input의 기본 속성으로 처리하려 했지만..

input의 accept 속성에 사용할 확장자명을 추가해 원하는 파일만을 선택이 가능합니다.

accept 속성에 쉼표(',')를 통해 허용 확장자를 추가할 수 있는데요.

기존에는 pdf 확장자명을 지닌 파일만 선택하도록 설정해줬지만, 모든 이미지 파일도 포함되도록 변경했습니다.

<input type="file" accept=".pdf, image/*" />

 

그러나 QA 단계에서 제한 확장자가 아닌 파일도 업로드가 가능하다는 답이 돌아왔습니다.

QA 응답을 보고선 바로 떠오른 게 있었는데요.

바로 파일 업로드 시, 모든 파일로 변경하는 상황이었습니다.


2) 파일 선택이 이뤄지는 함수에서 분기문을 통해 처리하자 

파일 업로드와 연관된 함수에서 파일의 타입에 따라 분기 처리를 함으로서

문제를 해결할 수 있었습니다.(input에 설정한 accept 속성은 유지해줬습니다!)

 const handleUpload = (event: ChangeEvent<HTMLInputElement>) => {
 	const files = event.currentTarget.files;
    if (!files) return;

    const file = files[0];
    const isAllowedFileType = file.type.includes('image') || file.type.includes('pdf');

    if (!isAllowedFileType) {
      // 에러 발생 시 처리해주면 되는 부분. 상태값이 될 수도, 모달 활성화가 될 수도 있겠네요.
      return;
    }
    ...
    }

 

QA 통과!

저작자표시 비영리 변경금지 (새창열림)

'그날의 배움' 카테고리의 다른 글

기차 티켓 대기열은 어떤 구조일까(feat.Queue)  (7) 2024.09.21
dev-dependencies를 두고 구내 식당에서 펼쳐진 토론  (1) 2024.09.10
홈화면에 Server Driven UI를 적용해보았다  (0) 2024.08.23
개발 목표 중 하나인 결제 기능을 구현해보았다.  (0) 2024.08.08
Recoil에서 Zustand로 환승한 이유  (0) 2024.07.17
'그날의 배움' 카테고리의 다른 글
  • 기차 티켓 대기열은 어떤 구조일까(feat.Queue)
  • dev-dependencies를 두고 구내 식당에서 펼쳐진 토론
  • 홈화면에 Server Driven UI를 적용해보았다
  • 개발 목표 중 하나인 결제 기능을 구현해보았다.
KANG_G1
KANG_G1
개인적인 Front-End 학습 내용을 정리합니다.
  • KANG_G1
    네가 남긴 Console
    Github Link
    Gmail: kkgi1234@gmail.com
    • 분류 전체보기 (116) N
      • 그날의 배움 (45) N
      • 생각해보니 그렇더라 (8)
      • React-Native (0)
      • Network (2)
      • Design Pattern (5)
      • JS & REACT (11)
      • Next.js (3)
      • TypeScript (3)
      • Error Handling (17)
      • Algorithm (22)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.2
KANG_G1
특정 파일 확장자를 선택할 때, input의 accept가 주는 함정
상단으로

티스토리툴바