이미지 업로드를 위해 인터셉터를 사용할 때 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 |