Node JS에서 업로드된 파일의 유효성을 검사하는 방법
18102 단어 multerjavascriptwebdevnode
유효성 검사 또는 압축을 처리하는 더 좋은 방법이 있으면 주석 섹션에 드롭하십시오.
대부분의 경우 파일은 Multer, busboy 또는 Formidable을 사용하여 Node JS 서버에서 구문 분석됩니다.
이 글에 사용된 콘텐츠는 Multer를 사용하지만 모든 시스템에 쉽게 적용할 수 있습니다.
파일 검증
Node JS의 파일은 일반적으로 JSON 형식입니다. 파일 형식은 아래에 표시된 두 가지 중 하나입니다.
// If memory storage is used
{
fieldname: 'image',
originalname: 'image.png',
encoding: '7bit',
mimetype: 'image/png',
buffer: <Buffer bytes>,
size: 25471
}
// If the file is stored locally
{
fieldname: 'image',
originalname: 'Meta1.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'uploads/',
filename: 'ed84692635f46d86c4be044f4acca667',
path: 'uploads/ed84692635f46d86c4be044f4acca667',
size: 25471
}
유효성 검사에 사용할 필드는 originalname, mimetype 및 size 필드입니다.
파일 확장자를 확인 중입니다.
우리는 파일 확장자를 얻기 위해 일부 내장된 JS 함수와 결합된 비트 오른쪽 시프트 연산자를 사용할 것입니다.
const file_extension = image.originalname.slice(
((image.originalname.lastIndexOf('.') - 1) >>> 0) + 2
);
위의 방법은 철자가 틀린 파일 이름(예: image.png.png, photo.jpeg.jeg)을 포함하여 98%의 사례에서 작동하는 것으로 입증되었습니다.
이제 파일 확장자가 있으므로 유효한지 확인할 수 있습니다.
// Array of allowed files
const array_of_allowed_files = ['png', 'jpeg', 'jpg', 'gif'];
// Get the extension of the uploaded file
const file_extension = image.originalname.slice(
((image.originalname.lastIndexOf('.') - 1) >>> 0) + 2
);
// Check if the uploaded file is allowed
if (!array_of_allowed_files.includes(file_extension)) {
throw Error('Invalid file');
}
파일 확장자만 확인하는 것은 누구나 파일 이름을 편집하고 확장자를 변경할 수 있기 때문에 실용적이지 않습니다. 즉, 파일 이름을
todo-list.docx
에서 todo-list.png
로 쉽게 변경할 수 있습니다.이러한 이유로 파일이 이미지인지 확인하기 위해 파일의 mimetype도 확인해야 합니다. 이를 수행할 때 유사한 접근 방식을 따를 것입니다.
const array_of_allowed_file_types = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
if (!array_of_allowed_file_types.includes(image.memetype)) {
throw Error('Invalid file');
}
두 수표를 결합하면
// Array of allowed files
const array_of_allowed_files = ['png', 'jpeg', 'jpg', 'gif'];
const array_of_allowed_file_types = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
// Get the extension of the uploaded file
const file_extension = image.originalname.slice(
((image.originalname.lastIndexOf('.') - 1) >>> 0) + 2
);
// Check if the uploaded file is allowed
if (!array_of_allowed_files.includes(file_extension) || !array_of_allowed_file_types.includes(image.memetype)) {
throw Error('Invalid file');
}
파일 크기 확인
파일 크기를 확인하기 위해 크기 필드를 사용합니다. 크기는 일반적으로 바이트 단위로 제공되므로 평가를 위해 원하는 형식으로 변환해야 합니다. 우리의 경우 MB로 변환했습니다.
// Allowed file size in mb
const allowed_file_size = 2;
if ((image.size / (1024 * 1024)) > allowed_file_size) {
throw Error('File too large');
}
위의 유효성 검사를 종합하면 업로드된 파일의 유효성을 검사하는 express의 일반적인 미들웨어는 아래 코드와 같습니다.
export const auth = (req, res, next) => {
const image = req.file;
// Array of allowed files
const array_of_allowed_files = ['png', 'jpeg', 'jpg', 'gif'];
const array_of_allowed_file_types = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
// Allowed file size in mb
const allowed_file_size = 2;
// Get the extension of the uploaded file
const file_extension = image.originalname.slice(
((image.originalname.lastIndexOf('.') - 1) >>> 0) + 2
);
// Check if the uploaded file is allowed
if (!array_of_allowed_files.includes(file_extension) || !array_of_allowed_file_types.includes(image.memetype)) {
throw Error('Invalid file');
}
if ((image.size / (1024 * 1024)) > allowed_file_size) {
throw Error('File too large');
}
return next();
}
결론
파일 유효성 검사는 매우 중요합니다. 이 글은 이미지와 단일 파일 업로드를 사용했지만 다른 파일 형식에서도 작동하도록 쉽게 수정할 수 있습니다. 루프 안에 추가하면 파일 배열도 확인할 수 있습니다.
코드는 쉽게 통합할 수 있는 NPM 패키지로 묶였습니다. 링크를 따라 찾으십시오. Fileguard .
Reference
이 문제에 관하여(Node JS에서 업로드된 파일의 유효성을 검사하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thesameeric/how-to-validate-uploaded-files-in-node-js-2dc4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)