eunsoolib
이미지·미디어

get-file-type-from-buffer

매직 넘버로 버퍼의 파일 형식을 판별 (Effect)

파일명이나 확장자가 아니라 실제 바이트를 보고 판단하므로 업로드된 파일 검증에 쓸 수 있습니다. 판별은 file-typefileTypeFromBuffer에 위임합니다.

설치

pnpm add @cbcruk/get-file-type-from-buffer effect

반환값이 Effect이므로 실행하려면 effect가 필요합니다. 입력은 Uint8Array 또는 ArrayBuffer이며, Node BufferUint8Array이므로 그대로 넘길 수 있습니다.

사용법

import { readFile } from 'node:fs/promises'
import { Effect } from 'effect'
import { getFileTypeFromBuffer } from '@cbcruk/get-file-type-from-buffer'

const buffer = await readFile('photo.jpg')
const { ext, mime } = await Effect.runPromise(getFileTypeFromBuffer(buffer))
// ext: 'jpg', mime: 'image/jpeg'

실패 처리

실패는 FileTypeFromBufferError로 표현되므로 _tag로 잡을 수 있습니다.

const program = getFileTypeFromBuffer(buffer).pipe(
  Effect.catchTag('FileTypeFromBufferError', () =>
    Effect.succeed({ ext: 'bin', mime: 'application/octet-stream' }),
  ),
)

const fileType = await Effect.runPromise(program)

API

getFileTypeFromBuffer(buffer)

Effect<{ ext, mime }, FileTypeFromBufferError>를 반환합니다. { ext, mime }file-type의 판별 결과 객체입니다.

인자타입설명
bufferUint8Array | ArrayBuffer검사할 파일의 바이너리(Node Buffer도 가능)

FileTypeFromBufferError

Data.TaggedError('FileTypeFromBufferError') 기반 에러입니다(message, cause?).

상황messagecause
판별 중 예외 발생파일 형식 판별 중 오류 발생원래 예외
형식을 식별하지 못함파일 형식을 식별할 수 없습니다.

getfileTypeFromBuffer

오타가 있던 이전 이름으로, getFileTypeFromBuffer와 같은 함수입니다. @deprecated이니 새 코드에서는 쓰지 마세요.

On this page