node.js - มีวิธีใดบ้างในการใช้งานการตรวจสอบความถูกต้องสำหรับการอัปโหลดไฟล์โดยใช้ class-validator?
ฉันกำลังใช้ class-validator เพื่อการตรวจสอบข้อมูล ฉันต้องการนำการตรวจสอบมาใช้กับการอัปโหลดไฟล์ เช่น: ไฟล์ต้องไม่ว่าง (จะดีมากถ้าสามารถตรวจสอบด้วยว่าไฟล์ต้องเป็นรูปภาพ)
ฉันพยายามในลักษณะดังนี้:
export class FileModel extends Model {
@IsNotEmpty()
file: File
constructor(body: any) {
super();
const {
file,
} = body;
this.file = file;
}
}
แต่มันมักจะส่งกลับว่า "ไฟล์ไม่ควรเป็นค่าว่าง" แม้ว่าฉันจะเลือกไฟล์แล้วก็ตาม มีวิธีใดบ้างในการตรวจสอบความถูกต้องสำหรับการอัปโหลดไฟล์
ขอบคุณล่วงหน้าครับ/ค่ะ :)
คำตอบ #1
คุณสามารถสร้างตัวตกแต่งการตรวจสอบแบบกำหนดเองของ class-validator ได้:
interface IsFileOptions {
mime: ('image/jpg' | 'image/png' | 'image/jpeg')[];
}
export function IsFile(options: IsFileOptions, validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
return registerDecorator({
name: 'isFile',
target: object.constructor,
propertyName: propertyName,
constraints: [],
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
if (value?.mimetype && (options?.mime ?? []).includes(value?.mimetype)) {
return true;
}
return false;
},
}
});
}
}
ตัวตกแต่งแบบกำหนดเองข้างต้นเพียงตรวจสอบประเภท mime ของไฟล์ คุณสามารถเขียนการใช้งานที่ซับซ้อนมากขึ้นและยังสามารถเพิ่มการตรวจสอบขนาดไฟล์ เป็นต้น คุณสามารถใช้ตัวตกแต่งแบบกำหนดเองเช่นนี้ในคลาส DTO ของคุณ:
class UploadImageDto{
@IsFile({ mime: ['image/jpg', 'image/png']})
file: any;
}
นอกจากนี้หากคุณกำลังใช้ class-validator ใน NestJs คุณสามารถใช้ไลบรารี nestjs-form-data ซึ่งมี @HasMimeType, @IsFile, @MaxFileSize และเดคอเรเตอร์ตรวจสอบไฟล์อื่นๆ ที่พร้อมใช้งานได้ทันที
