본문 바로가기

dev/nestjs

FileFieldsInterceptor

이미지 업로드를 위해 인터셉터를 사용할 때 FilesInterceptor() 또는 FileInterceptor() 를 사용한다.

만약 이미지가 서로 다른 키값을 가져야 할 때 FileFieldsInterceptor()를 사용한다.

 

FormData formData = FormData.fromMap({
  "image1": multiPartImageFile1,
  "image2": multiPartImageFile2,
  "name": name
});

 

이런 식으로 이미지 2개를 업로드 하는데 이미지 파일1과 2가 다른 폴더에 저장되어야 한다면 키값을 다르게 해서 보내준다.

 

@UseInterceptors(
    FileFieldsInterceptor(
    // 필드값 구분
      [
        { name: 'image1', maxCount: 1},
        { name: 'image2', maxCount: 1},
      ],
      {
        storage: diskStorage({
          destination: "images/",
          filename: (req, file, callback) => {
            const fieldName = file.fieldname; // 파일의 필드값
            if (fieldName == 'image1') {
              // image1로 보낸 파일
            } else {
              // image2로 보낸 파일
            }

            callback(null, file.filename);
          }
        }),
      },
    ),
)

 

FileInterceptor()와 다른 점은 [] 안에 파일을 받을 name을 정해주는 것이다.

storage는 저장할 폴더를 지정해주고 callback()을 이용해 정보를 넘겨준다.

 

async upload(
	@UploadedFiles() files: Array<Express.Multer.File> // 콜백으로 넘어온 파일
    ) {
			
	// image1 파일 체크
      if (typeof files['image1'] === 'undefined' || files['image1'] === null || files['image1'] ===  "") {
        console.log("image1 undefined");
      }

	// image2 파일 체크
      if (typeof files['image2'] === 'undefined' || files['image2'] === null || files['image2'] ===  "") {
        console.log("image2 undefined");

      } else {

	// image2의 파일을 다른 경로로 이동
        var fs = require('fs') 

        var oldPath = `../images/${files['image2'][0].filename}`;
        var newPath = `../images/image2/${files['image2'][0].filename}`

        fs.rename(oldPath, newPath, function (err) {
          if (err) {
            throw err
          } 
          console.log('move Success!')
        })
      }

    return;
  }

'dev > nestjs' 카테고리의 다른 글

nestjs 프로젝트 생성 시 오류 (Failed to execute command: npm install --silent)  (0) 2023.11.01
MariaDB 연동  (0) 2023.02.16
인터셉터  (0) 2023.02.14
HTTP module  (0) 2023.02.13
환경 변수  (0) 2023.02.12