ash*_*mi5 2 angular2-forms angular2-directives angular
我是新手。我想创建一个自定义验证来检查文件大小和扩展名。我正在使用FormBuilder进行验证,并使用FileReader API来获取输入元素字段数据的文件名和大小。
问题:我们能够在变更事件上触发自定义验证,但无法获取输入类型字段的值。
请提出建议,我们如何实现角度2中文件扩展名和大小的自定义验证。
HTML:
<input type="file" [formControl] = "formName.controls['thumbnailImg']" (change)="changeThumbFile($event)">
Run Code Online (Sandbox Code Playgroud)
零件:
//custom validation
function validateExt(c: FormControl) {
let extension = ['png', 'jpeg', 'gif'];
return extension.indexOf(c.value)? null : { validateExt: { valid: false } }
}
this.form = this.formBuilder.group({
'thumbnailImg': ['', validateExt],
});
changeThumbFile($event){
var file: File = $event.target.files[0];
var fReader: FileReader = new FileReader();
var imgName = file.name;
this.thumbnailName = imgName;
this.formGp.controls['thumbnailImg'].updateValueAndValidity();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我有一个解决方案,也许不是一个完美的解决方案,但是它可以工作(文件大小也一样),这里是:
首先在html文件上,我获得了用于文件上传的表单,并且在每次上传文件时,我都会调用一个名为fileEvent()的特定函数,布局文件包含:
<form [formGroup]="photoForm" (submit)="savePhoto()">
<table>
<tr>
<td>Photo</td>
<td>
<div class="file-edit">
<input type="file" (change)="fileEvent($event)" formControlName="newPhoto" class="form-control" required #newPhoto>
</div>
</td>
<td><p class="warning">{{fileExtensionMessage}}</p></td>
</tr>
<br/>
<tr>
<td></td>
<td><button type="submit" [disabled]='fileExtensionError' class="submit-btn">Save</button></td>
</tr>
</table>
</form>
Run Code Online (Sandbox Code Playgroud)
请注意,如果fileExtensionError变量为true,则禁用提交按钮。
检查验证的函数fileEvent()也给我文件名,文件扩展名和文件内容,如下所示:
fileEvent(event) : any {
//*-- this function gets content of uploaded file and validation --
*/
var file = event.target.files[0];
this.photoName = file.name;
var allowedExtensions =
["jpg","jpeg","png","JPG","JPEG","JFIF","BMP","SVG"];
this.fileExtension = this.photoName.split('.').pop();
if(this.isInArray(allowedExtensions, this.fileExtension)) {
this.fileExtensionError = false;
this.fileExtensionMessage = ""
} else {
this.fileExtensionMessage = "Only photos allowed!!"
this.fileExtensionError = true;
}
if (file) {
var reader = new FileReader();
reader.onloadend = (e: any) => {
var contents = e.target.result;
this.photoContent = contents;
}
reader.readAsDataURL(file);
} else {
alert("Failed to load file");
}
}
/*- checks if word exists in array -*/
isInArray(array, word) {
return array.indexOf(word.toLowerCase()) > -1;
}
Run Code Online (Sandbox Code Playgroud)
当然,我在课堂上声明了以下变量:
photoName: any;
photoContent : any;
fileExtension: any;
fileExtensionError: boolean = false;
fileExtensionMessage: any;
photoForm : FormGroup;
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人:D
| 归档时间: |
|
| 查看次数: |
7359 次 |
| 最近记录: |