0
votes

Comment personnaliser la validation de l'image de fichier de type d'entrée

bonjour je veux valider une image de type HTML de fichier d'entrée juste accepter " png", "jpg", "jpeg", "gif code>" et ne sera pas supérieur à 2 Mo jusqu'à ce que je puisse le rendre possible Seulement que cela ne me prend pas cela.firstformgroup.controls.Image .status code> Si vous entrez un autre fichier est activé en tant que statut valide.

this.firstFormGroup = this.fb.group({
      ruc: ['', rucValidator],
      razon_social: ['', nameValidator],
      nameBussines: ['', nameValidator],
      phone: ['', phoneValidator],
      describe: ['', describeValidator],
      plan: ['', Validators.required],
      category: ['', Validators.required],
      image: ['', this.validateImage]
    });


4 commentaires

Pouvez-vous créer une démo de Stackblitz?


@Kiraag salut je tente de faire fonctionner je ne peux pas adapter la bibliothèque Stackblitz.com/edit/...


En fait, sur une autre note, votre approche est valable uniquement. Quelle est la question que vous rencontrez avec cette approche?


@Kiraag La validation est correcte que celle-ci.firstFormgroup ne prend pas ce que la validation revient pour elle est toujours valide tout ce qu'il fait dans la fonction ManagefileInput ()


3 Réponses :


1
votes

Vous devez créer un formulaire personnalisé, je vais vous montrer comment la créer ( Exemple en ligne ) ou vous pouvez utiliser le module NPM ( FileInputAccessor )


étapes pour créer des formulaires et télécharger le fichier valide p>

  1. Implements ControlValueAccessor LI>
  2. Règles de validation personnalisées ajoutées
    • Inscrivez-vous des règles de validation personnalisées li> ul> li>
    • Écoutez des événements de changement sur vos formes réactives
      • Téléchargez le fichier valide sur votre stockage li> ul> li> OL>

        1.Implements ControlValueAccessor strong> P>

        image-formontrol.commonent p>

        p>

        export class AppComponent {
        
          firstFormGroup: FormGroup;
        
          constructor(private fb: FormBuilder) { }
        
          ngOnInit() {
            const imageFormControl = new FormControl('', ImageFormcontrolValidator.allowedTypes(['jpeg']));
        
            this.firstFormGroup = this.fb.group({
              image: imageFormControl
            });
        
            imageFormControl.statusChanges.subscribe((status) => {
              switch (status) {
                case 'VALID':
                  // Upload the valid file to your storage
                  const value = imageFormControl.value as ImageFormcontrol.Value;
                  this.upload(value.file);
                  break;
              }
            });
          }
        
          private upload(file: File) {
            console.log('upload', file);
        
            /* your custom logic
        
            const filePath = `${this.rutaImg}/${file.name}`;
                const fileRef = this.storage.ref(filePath);
                const task = this.storage.upload(filePath, file);
                this.uploadPercent = task.percentageChanges();
                task.snapshotChanges().pipe(
                    finalize(() => {
                      this.downloadURL = fileRef.getDownloadURL();
                      this.downloadURL.subscribe( url => {
                        if ( url ) {
                          this.urlImg = url;
                          console.log(this.urlImg);
                          this.validateImage = true;
                          console.log(this.validateImage );
                          return {
                            isError: this.validateImage
                        };
                        }
                     });
                    })
                 )
                .subscribe();
        
              */
          }
        }


3 commentaires

Bonjour Merci pour l'aide, j'essaie de l'adapter à ma logique, mais je ne peux pas le faire lors du chargement de l'image writevalue (valeur: imageformControl.value) this._registerontouchedfn, this. _registeronchangefn , je ne comprends pas sa fonctionnalité, en dehors de celui-ci, vous n'activez jamais validateimage.statuschanges.subscribe ((état)


reinscriptiononchange Fonction: enregistre une fonction de rappel appelée lorsque la valeur du contrôle change Dans l'UI


Vous pouvez fourchette mon exemple < / a>. Ajoutez votre logique à l'exemple et décrivez ce que vous voulez faire et ce que vous avez essayé et quels problèmes vous avez rencontrés, espérons que cela peut vous aider :)



0
votes

J'ai un Stackblitz qui pourrait vous aider ou aider quelqu'un. N'est pas parfait, mais après la lecture et la recherche beaucoup. Je ne fais que cela uniquement pour valider les extensions de fichiers.

https: // filedupload-personnalisé-validateur-forme-réactif-formulaire .sttackblitz.io

Je reprends ici:

  1. Créez un validateur personnalisé pour votre groupe de formulaires ou votre constructeur de formulaire.

  2. Ajoutez-le à votre composant et définissez une matrice d'extension autorisée fichiers.

  3. retourne d'état non valide ou valide sur votre formulaire d'entrée.


0 commentaires

0
votes

Validation personnalisée pour les fichiers requis pour le type d'entrée de fichier

requisFileType.ts h2> xxx pré>

composant.ts h2> xxx pré> HTML H2>
<div class="col-sm-5">
          <input
            type="file"
            formControlName="FileUpload"
            [class.is-invalid]="FileUpload.invalid && uploadPanel"
            class="form-control"
            (click)="handleFileInput($event.target.files)"
            #inputTypeFile
          />

          <!-- <button onclick="document.getElementById('abc').click()">
            choose file
          </button> -->
          <div *ngIf="FileUpload.invalid && uploadPanel">
            <small *ngIf="FileUpload.errors?.required" class="text-danger"
              >File is required</small
            >
            <small
              *ngIf="FileUpload.errors?.requiredFileType"
              class="text-danger"
              >File is required</small
            >
          </div>
        </div>


0 commentaires