[英]Set Custom Validation for File Upload in angular Form is not working as expected
我想实现上传 pdf 文件验证。 如果上传的 pdf 文件受密码保护,则不应允许。 我正在使用 angular typescript。
以下是我的自定义验证 Function
export function pdfFileValidator(file: File,fileExtension:string): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
var res = false;
if(fileExtension.toLowerCase() === 'pdf'){
pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdf.worker.js'
var url = URL.createObjectURL(file);
const loadingTask = pdfjsLib.getDocument(url);
loadingTask.promise.then(function(pdf) {console.error(pdf)})
.catch((e:PasswordException) => {
console.error("File is Password Protected")
res = true;
}).finally( () =>{
return {
'EncryptedFileViolated': res,
};
});
}
console.error("response =",res)
return null;
};
}
下面是我设置的验证 function
setFileValidators(fileSize: number, fileExtension: string,file:File) {
this.form.get('file')?.setValidators([FileSizeValidator(fileSize, this.maxSizeAllowedInMB),
FileExtensionValidator(fileExtension, ['pdf','jpg','png']),pdfFileValidator(file,fileExtension)]);
this.form.get('file')!.updateValueAndValidity()
console.error(this.form);
}
它现在是如何工作的
这两行早先执行,无需等待pdfFileValidator
function 的完整执行
this.form.get('file')!.updateValueAndValidity()
console.error(this.form);
并且表格显示status = valid
我希望this.form.get('file')?.setValidators()
应该等待pdfFileValidator()
function 完成,然后执行updateValueAndValidity()
function。
我们如何实现这一点?
您的 pdfJs 库 function 需要时间,并且您已使用setValidators
function 设置同步验证,因此它无法按您的意愿工作。
您必须使用setasyncvalidators设置异步验证器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.