본문 바로가기
관리자

Programming-[Base]/Web, Browser

[TIL] MIME TYPE .jpg 서버에서 해석문제

728x90
반응형

 

문제상황

클라이언트가 업로드한 파일을 바이트 어레이로 변경하고 외부 서버를 호출하는 과정에서 에러가 발생했다.

 

@Override
  public void setFormDataImageFile(MultiValueMap<String, Object> formData, MultipartFile file) {
    try {
      byte[] fileBytes = file.getBytes();

      String originalFilename = file.getOriginalFilename();
      final String fileExtension;

      if (originalFilename != null && originalFilename.contains(".")) {
        fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
      } else {
        throw new CustomException(...);
      }

      formData.add(
          "image",
          new ByteArrayResource(fileBytes) {
            @Override
            public String getFilename() {
              return UUID.randomUUID() + fileExtension; //fileExtension 부분을 추가하지 않았었음
            }
          });
    } catch (IOException e) {
      throw new IllegalArgumentException(
          "Failed to process the file: " + (file.getOriginalFilename() != null
              ? file.getOriginalFilename() : "unknown file"), e);
    }
  }

 

 

MultipartFile 형태로 받아온 파일의 원본 이름을 제외하고, UUID형태로 변환하는 과정에서 확장자를 빼먹고 변환 후 외부 서버로 전송했다. 그랬더니 외부 서버에서는 .jpg와 같은 확장자를 보고 바이트 어레이의 MIME TYPE을 추론하기 때문에 에러가 났다.

 

테스트 시에 포스트맨으로 보낼 때는 에러가 발생하지 않았다. 포스트맨은 파일을 업로드 할 때 확장자를 참조하여 MIME_TYPE을 자동으로 포함하여 요청을 보내기 때문이다.

 

 

* MIME 타입(MIME Type)란?

MIME(Multipurpose Internet Mail Extensions) 타입은 인터넷에서 파일, 데이터, 이메일 등을 전송할 때 데이터의 형식과 유형을 식별하기 위해 사용되는 표준 형식입니다. 이는 클라이언트(웹 브라우저, 애플리케이션)와 서버가 데이터를 올바르게 처리할 수 있도록 도와줍니다.

 

 

MIME 타입의 역할

 

클라이언트와 서버 간 데이터 처리

• 클라이언트가 서버로부터 받은 데이터를 어떻게 처리할지 결정하는 데 사용

• 예: text/html은 브라우저가 HTML로 렌더링하도록 지시

 

파일 전송 및 업로드

• 업로드되는 파일의 유형을 서버가 판별

• 예: 이미지 파일이 image/jpeg인지, image/png인지 확인

 

보안

• 잘못된 MIME 타입의 데이터를 무시하거나 거부하여 보안 문제 방지

• 예: HTML 대신 실행 가능한 스크립트를 포함한 파일 전송을 막음

728x90
반응형