ค้นหาเว็บไซต์

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 และเดคอเรเตอร์ตรวจสอบไฟล์อื่นๆ ที่พร้อมใช้งานได้ทันที

บทความที่เกี่ยวข้อง