CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[IONIC3] Comment être sur de ca ?

coquine_93
coquine_93
Niveau 7
07 avril 2020 à 12:20:17

Bonjour ami d'Ionic

Je fais un formulaire pour qu'un user rentre ses infos: nom, age..
J'utilise un form Group avec des FormControl pour chaque fields (tout fonctionne bien pour les inputs textes) mais je voudrai être sur que l'user rentre une photo avant de pouvoir sign up...

J'ai testé deux solutions:

1.)
photo: new FormControl('', [Validators.required]),

par ex sur un button (ou même un input..) qui permettrait de rentrer l'image
Mais le FormControl ne fais pas effet..

Est ce possible de lé vérifier avec un FormControl?

2) tester que ma field item.photo n'est pas vide avant de pouvoir sign up l'user... mais là le problème vient du fait que je stocke les photos avec le uid (la key) de l'item ==> mais que je récupère seulement lorsque je push mon item ds la bdd..

Je n'ai pas d'autres options en tête, ca fait un gros moment que je suis bloqué sur ca... Si quelqu'un a des idées sur ces deux options ou même une autre option ca serait :ok:

Merci d'avance

boucif
boucif
Niveau 24
08 avril 2020 à 00:01:49

Ionic c’est du Angular, normalement tu peux créer tes propres validator et donc tu peux vérifier qu’une photo a bien été ajoutée, je crois avoir fait un truc comme ça sur un projet.
J’upload la photo derrière je récupère l’id de la photo uploader et mon validator check si j’ai bien un id renseigner pour la photo après tu peux toujours valider dans le submit avant de faire l’appel serveur.

coquine_93
coquine_93
Niveau 7
08 avril 2020 à 21:49:15

merci de ta réponse :ok:

je me suis basé sur ce que tu m'as dit, mais je n'utilise pas le Validator... J'aurai bien aimé l'utiliser.

Ce que j'ai fait :

HTML


<form novalidate (ngSubmit)="validate()" [formGroup]="sellingForm">

<button ion-button (click)="selectPicture()"> </button>

   <button ion-button (click)="validate()"> VALIDER (2/2) </button>

</form> 

TS:



  ngOnInit() {
    this.sellingForm = new FormGroup({
      photo: new FormControl('', [Validators.required]),
    });
  }


    this.camera.getPicture({
      quality: 95,
      destinationType: this.camera.DestinationType.DATA_URL,
      sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
      encodingType: this.camera.EncodingType.JPEG,
      targetWidth: 500,
      targetHeight: 500,
    }).then(imageData => {

      this.base64Image = "data:image/jpeg;base64," + imageData;
      this.Picture = imageData;

      this.item.photo = imageData;
      console.log(imageData);

    }, error => {
      console.log("ERROR -> " + JSON.stringify(error));
    });


validateCustom() {
    if (this.item.photo == '') {
      const toast = this.toastCtrl.create({
        message: ' Tu dois rentrer une photo ',
        cssClass: "toast-scheme ",
        showCloseButton: true,
        closeButtonText: "OK",
        position: 'top',
        duration: 8000
      });
      toast.present();


    } else {

//push l'item ds la bdd et apl la fonction pr upload la photo 
      
    }
  }

Voilà donc j'assigne une valeur au moment de rentrer la photo (méthode: selectPicture()) mais comme tu le vois je n'utilise pas de form control... Il faudrai évidemment que je bind mon formControl à cet élément.

Sais tu comment je pourrai ?

Merci en tout les cas :-)

boucif
boucif
Niveau 24
08 avril 2020 à 21:59:14

J'ose espérer qu'en angular pure ca marche
https://angular.io/guide/form-validation
dans la doc tu vois forbiddenNameValidator(/bob/i) // <-- Here's how you pass in the custom validator.
et en dessous un code d'exemple ton but est le même

dans ton cas pas sur que t'es besoin de ca tu veux juste valider que this.item.photo est required pourquoi ne pas mettre un formcontrol sur cette propriété

après je ne sais pas si t'es obligé de le déclarer dans la vue au pire tu mets un input de type hidden

coquine_93
coquine_93
Niveau 7
08 avril 2020 à 22:44:54

merci de ton aide ! :-)

J'ai mis un input type hidden et je crois que ca fonctionne ! je vais faire plusieurs tests et te dire

coquine_93
coquine_93
Niveau 7
08 avril 2020 à 23:00:41

Pour récupérer le url de la photo, je fais ca (dans la fonction que j'ai envoyé juste au dessus) :


this.item.photo = imageData;

sauf que ca ne me donne pas du tout l'url auquel la photo est stocké

Tu sais comment je peux récupérer cette url ? comme ca je l'enverrai ds la bdd au moment du push

boucif
boucif
Niveau 24
09 avril 2020 à 09:15:46

parce que c'est pas une url que tu génère mais une image en base64, et tu peux envoyer cette photo en base 64 sur ton serveur et faire les traitement adéquate derrière pour la stocker.

ouimaisquoi
ouimaisquoi
Niveau 8
09 avril 2020 à 09:46:21

Comment fera-tu pour savoir que ce n'est pas une photo de pangolin ?

coquine_93
coquine_93
Niveau 7
09 avril 2020 à 12:55:47

Ok je vois à peu près le truc @boucif :ok:

Dans mon code, j'ai tenté de le faire comme ca :


  createPost(Picture: string, key: string) {
    let promise = new Promise((resolve, reject) => {
      firebase.storage().ref('/pictures/').child(key).child("first")      
        .putString(this.Picture, 'base64', {contentType: 'image/png'})
        .then((savedPicture) => {

          this.fireS.push({
            Picture: savedPicture.downloadURL,
            name: this.item.uid,
          })
          this.item.photo = savedPicture.downloadURL; // <----  j'ai ajouté ca 
        })
    })
    return promise;
  }

Mais j'ai une erreur "Reference.push failed : first argument contains undefined in property 'list.Picture' validateFirebaseData...."

Je ne vois pas trop où je peux récupérer le bon url

@ouimaisquoi ==> tqt :-))) c'est la prochaine étape, je vais créer un système pour checker ca !

Message édité le 09 avril 2020 à 12:56:35 par coquine_93
boucif
boucif
Niveau 24
09 avril 2020 à 13:43:12

Essaye déjà d’affecter ton this.picture à la src d’une image pour voir si l’image fonctionne bien.

coquine_93
coquine_93
Niveau 7
09 avril 2020 à 17:12:53

Bon j'ai tenté d'affecter mon this.item.picture à : (ds la méthode au dessus selectPicture()):

      this.base64Image = "data:image/jpeg;base64," + imageData;

ou
this.Picture = imageData;

ou encore dans la méthode :


  createPost(Picture: string, key: string) {
    let promise = new Promise((resolve, reject) => {
      firebase.storage().ref('/pictures/').child(key).child("first")  
        .putString(this.Picture, 'base64', {contentType: 'image/png'})
        .then((savedPicture) => {

          this.fire.push({
            Picture: savedPicture.downloadURL,
            name: this.item.uid,
          })
        })
    })
    return promise;
  }

ici j'ai tenté d'assigner le item.photo au retour de la promise, ou encore à Picture (savedPicture.downloadURLà mais rien ne fait le job!

(pour info la photo est bien push ds le storage et l'item ds la bdd)..

Peut ê qu'il y a un lien avec ca ==>
Lorsque j'upload une photo avec la fonction :


 create(Picture: string, key: string) {
    let promise = new Promise((resolve, reject) => {
      firebase.storage().ref('/pictures/').child(key).child("first")    
        .putString(this.Picture, 'base64', {contentType: 'image/png'})
        .then((savedPicture) => {

          this.fireS.push({
            Picture: savedPicture.downloadURL,
            name: this.item.uid,
          })
        })
    })
    return promise;
  }

J'ai un message d'erreur de la console :
"https://firebasestorage.googleapis.com... Failed to load resource: the server responded with a status of 404"

ainsi qu'une erreur:


Error: Uncaught (in promise): Error: Reference.push failed: first argument contains undefined in property 's-list.Picture' validateFirebaseData@ionic://localhost/build/vendor.js:105124:24 ionic://localho...
boucif
boucif
Niveau 24
10 avril 2020 à 02:20:16

Par contre j'ai jamais utilisé firebase storage, je pourrais pas t'aider sur ce point là.

coquine_93
coquine_93
Niveau 7
10 avril 2020 à 12:56:11

Ok ok, pour stocker une image tu n'as pas utilisé Firebase?

boucif
boucif
Niveau 24
10 avril 2020 à 15:26:55

Perso, c'était sur des base des données soit sql server soit azure no sql.
J'ai lu la doc et sur le net ils disent que si tu veux uploader une image base64 tu peux utiliser ca :
// Data URL string var message = 'data:text/plain;base64,5b6p5Y+344GX44G+44GX44Gf77yB44GK44KB44Gn44Go44GG77yB'; ref.putString(message, 'data_url').then(function(snapshot) { console.log('Uploaded a data_url string!'); });

https://firebase.google.com/docs/storage/web/upload-files

ca te permet d'uploader directement tout ton texte avec le tag base64 que tu déclare dans this.base64Image
et ton content-type n'a pas l'air utile dans ce cas la

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment