[TIL] multer 미들웨어

sunriseGong·2021년 11월 16일
1

멀티파트 형식을 처리하는 방법은?

멀터 미들웨어를 사용할 수 있습니다.

( 설치 : npm i multer )

멀티파트 형식

이미지, 동영상 등을 비롯한 여러 가지 파일들을
이 형식으로 업로드 합니다.

enctype=multipart/form-data 인
폼을 통해 업로드하는 데이터의 형식을 의미합니다.

멀티 파트 형식 처리의 어려움

express.urlencoded({ extended: false })는
일반 폼만 파싱이 가능하고
멀티파트 형식은 파싱할 수 없습니다.

직접 파싱(해석)하는 것도 어렵습니다.

multer 는 이런 어려움을 해결해줍니다.

multer 미들웨어의 기본적인 기능

멀티파트 형식의 데이터를 파싱할 수 있습니다.

파싱한 데이터를 원하는 저장공간에
저장할 수 있도록 설정할 수 있습니다.

업로드 파일의 크기를 제한하는 설정을 할 수 있습니다.


개발자 도구에서 폼 데이터를 확인하는 방법은?

요약 : 개발자 도구 > Network탭 > Headers탭에서 하단

멀티파트 형식 폼 데이터 전송하기

이미지 하나를 선택 하고
title 인풋에 텍스트를 아무거나 적어서
업로드 버튼을 클릭하면
멀티파트 형식으로 폼 데이터가 전송됩니다.

어디서 확인할 수 있을까요?
폼 데이터는
개발자 도구 > Network탭 > Headers탭에서 하단
으로 가면 확인할 수 있습니다.
(아래 예시는 멀티파트폼이 아닌 일반폼 입니다.)


멀터의 설정은 어떻게 하나요?

multer 함수의 인수로 설정을 넣습니다.
const upload = multer({ 여기에 설정 })


멀터 설정시 storage속성에 대해서 설명해주세요.

storage는
어디에 어떻게 저장할지 설정할 수 있는 속성 입니다.

어디에 저장하느냐에 따라
multer.diskStorage, multerS3 등의 함수를 이용할 수 있습니다.

multer.diskStorage

서버에 존재하는 어떤 폴더에 파일을 저장할 때 사용합니다.

다음 두 함수를 이용해 설정합니다.

destination 함수로
어떤 폴더(존재하는 폴더여야 함)에 저장할지 설정 합니다.

filename 함수로
파일명을 수정해서 저장할 수도 있습니다.

(현재 날짜를 합쳐서 파일명을 수정한 이유 -> 파일명 중첩 방지)

destination과 filename 함수는
매개변수로 req, file, done를 가지고 있습니다.

req :
요청에 대한 정보가 있음

file :
객체이며 업로드한 파일에 대한 정보가 있음

done :
다음과 같이 사용되는 함수입니다.
done(인수1, 인수2)
인수1 : 에러가 있다면 에러를 넣습니다.
인수2 : 저장할 폴더명 or 수정할 파일 이름 을 넣어줍니다.

req나 file의 데이터를 가공해서
done으로 넘기는 형식으로 사용 됩니다.

multerS3

multer.diskStorage 대신 multerS3 를 이용하면
AWS S3 버킷에 파일을 저장할 수 있습니다.

서버 자체에 파일을 저장하면 오토스케일링시
불필요하게 파일까지 복사되서
금전적 손실로 이어질 수 있습니다.

그래서 AWS의 S3 같은 서비스를 이용해
파일은 별도로 관리하는 것이 효율적일 수 있습니다.

다소 설정에 차이가 있으나 설정하는 사항은 비슷합니다.


멀터 설정시 limits속성에 대해서 설명해주세요.

limits 속성으로
업로드에 대한 제한 사항을 설정할 수 있습니다.

fileSize : 파일 사이즈를 바이트 단위로 설정해 제한할 수 있습니다.


서버 실행시 필요한 폴더를 자동 생성하는 방법은?

multer.diskStorage 에서 설정한 저장 폴더는 반드시 존재해야 합니다.

아래와 같이
서버 실행시 해당 폴더가 존재하지 않는 경우
폴더를 생성하도록 설정할 수 있습니다.

fs.accessSync(‘uploads’) : uploads 폴더에 접근합니다.
fs.readdirSync(‘uploads’) : uploads 폴더를 조회합니다.
둘중 하나를 이용해 uploads 폴더가 있는지 확인하고(try)

없다면(catch)
fs.mkdirSync(‘uploads’) : uploads 폴더를 생성합니다.


멀터를 설정한 upload 변수에는 어떤 미들웨어가 들어 있나요?

single, array, fields, none 미들웨어가 있습니다.

array 미들웨어 사용예시 입니다.

single :
파일을 하나만 업로드하는 경우에 사용
업로드 성공시 업로드 결과 정보가 들어 있는
req.file 객체가 생성됨

array :
여러 파일을 업로드 하는 경우에 사용
업로드 성공시 req.files 배열이 생성됨

fields :
파일을 여러 개 업로드하지만
input 태그나 폼 데이터의 키가 다른 경우에 사용
업로드 성공시 req.files.키 로
업로드 결과 정보에 접근할 수 있음

none :
파일을 업로드하지 않고도 멀티파트 형식으로 업로드하는 경우에 사용
파일은 업로드 되지 않았으므로
req.body 에만 값이 존재함


출처 : https://thebook.io/080229/ch06/02/07/

profile
심심해야 공부하게 된다.

0개의 댓글