IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

Importer FileReaderSync avec Angular 8


Sujet :

Angular

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Importer FileReaderSync avec Angular 8
    Bonjour,
    j'ai une simple question javascript

    j'affiche tour à tour les objets suivants

    1) data
    2) data.files
    3) data.length (-> 0)
    4) data.files[0] (-> undefined)

    Nom : Capture d’écran 2020-11-16 à 15.02.07.png
Affichages : 598
Taille : 193,6 Ko

    je n'arrive pas à comprendre pourquoi data.files[0] est undefined

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    J'avais oublié de preciser un détail qui permet de résoudre le problème


    Voici comment j'alimente data


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
        <div style="position: relative;" class="uploadfilecontainer" (click)="fileInput.click()" appDragDrop (onFileDropped)="uploadFile($event)">

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          uploadFile(events: any) {
            let data = [];
            let i = 0;
            for (const event of events) {
               var reader = new FileReader();
               reader.onload = (event: any) => {
                   data.push(event.target.result);
               }
               reader.readAsDataURL(event);
     
              i++;
            }
          }
    et j'ai eu la réponse :
    reader.readAsDataURL(event); est asynchrone.
    Du coup j'essaye de lire d'une manière synchrone avec FileReaderSync
    Mais je n'arrive pas à l'importer avec Angular 8.
    J'ai trouvé un post pour l'importer avec Angular 2 (https://stackoverflow.com/questions/...nc-in-angular2), mais pas avec Angular 8

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    J'ai j'ai finalement pas réussi à importer FileReaderSync

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      let reader = new FileReaderSync();
      data.push(reader.readAsDataURL(event));

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Iimporter FileReaderSync avec Angular 8
    Bonjour, j'essaie d'importer FileReaderSync pour l'utiliser dans une application angular 8

    voici un printscreen de l'endroit où je l'importe

    Nom : Capture d’écran 2020-11-21 à 11.57.45.png
Affichages : 515
Taille : 19,7 Ko

    voici le contenu de index.d.ts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    interface FileReaderSync {
      readAsArrayBuffer(blob: Blob): any;
      readAsBinaryString(blob: Blob): void;
      readAsDataURL(blob: Blob): string;
      readAsText(blob: Blob, encoding?: string): string;
    }
     
    declare var FileReaderSync: {
      prototype: FileReaderSync;
      new(): FileReaderSync;
    };

    Mais ça ne marche pas

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour Krakatoa, merci pour ta réponse mais ça ne résout pas mon problème

  7. #7
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    pourtant l'exemple de kratoa fonctionne avec: let reader = new FileReader();
    alors pourquoi s'entêter avec FileReaderSync ?



    sinon essaye:

    tsconfig.json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
      "compilerOptions": {
    ...
    ...
        "typeRoots": [
          "node_modules/@types"
        ],

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour Dukoi et Krakatoa

    si vous lisez tous les messages, vous comprendrez ce que je veux faire. Pourriez vous m'aider. Je suis bloqué

  9. #9
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    tout est là:

    https://stackblitz.com/edit/angular-...p.component.ts



    tu peux créer sur stackblitz en mode public ton test
    et nous filer le lien qu'on regarde

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    bonjour Dukoid,

    voici le lien vers stackblitz :

    https://stackblitz.com/edit/angular-...p.component.ts

    Je n'arrive pas à importer FileReader et console.log : comment faire

    Mon objectif final, après est d'importer FileReadersync

  11. #11
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    on s'en fout de FileReadersync... ça ne fonctionne pas, point barre
    FileReader fonctionne...


    l'objectif c'est quoi ? la fonctionnalité ?

    récupérer une image , un pdf...
    et pour en faire quoi


    je m'en fou de FileReadersync, je ne veux plus en entendre parler

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour, je reprend tout depuis le début

    je veux faire un drag and drop de fichiers avec le code html suivant

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div style="position: relative;" class="uploadfilecontainer" (click)="fileInput.click()" appDragDrop (onFileDropped)="uploadFile($event)">

    je gère cela de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          uploadFile(events: any) {
            let data = [];
            let i = 0;
            for (const event of events) {
               var reader = new FileReader();
               reader.onload = (event: any) => {
                   data.push(event.target.result);
               }
               reader.readAsDataURL(event);
     
              i++;
            }
          }
    Plus tard, quand je veux récupérer l'élément data[0], j'obtiens undefined

    Nom : Capture d’écran 2020-11-26 à 17.03.46.png
Affichages : 464
Taille : 94,9 Ko

  13. #13
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    je vois que ça fonctionne à peu prêt


    j'ai re ecris le code
    j'ai viré ce qui ne servait à rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    import { Component } from "@angular/core";
     
    @Component({
      selector: "my-app",
      templateUrl: "./app.component.html",
      styleUrls: ["./app.component.css"]
    })
    export class AppComponent {
      name = "Angular";
     
      public imageFile: any;
      filesToCropp = [];
      reader = new FileReader();
     
      uploadFile(events: any) {
        let that = this;
        for (const event of events) {
          that.reader.onload = (event: any) => {
            that.filesToCropp.push(event.target.result);
          };
          that.reader.readAsDataURL(event);
        }
        this.reader.onloadend = (event: any) => {
          console.log(that.filesToCropp);      // filesToCropp  contient un tableau (en base64) avec tous les fichiers que l'on a sélectionnés 
        };
      }
    }
    et donc on obtient bien:
    data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAtAC0AAD/4gVYSUNDX1BST0...................................

    qui est la base 64 de l'image !
    tout fichier est transformé en base64 pour le manipuler dans le code !

    fichier -> en base 64
    base64 -> en fichier

    *** pour du drag n drop
    inutile de re inventer la roue, il existe des packages qui le fait très bien


    https://www.npmjs.com/package/ngx-file-drop
    et sa démo: https://georgipeltekov.github.io/

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour Dukoid, Merci pour ta réponse et ta patience

    la partie qui me manquait était

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.reader.onloadend = (event: any) => {
          console.log(that.filesToCropp);      // filesToCropp  contient un tableau (en base64) avec tous les fichiers que l'on a sélectionnés 
        };
    C'est résolu. Merci encore parce que ça fait longtemps que je n'arrivait pas à résoudre ce problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme Importer SWF Avec du Xml
    Par jf1988fr dans le forum Flash
    Réponses: 1
    Dernier message: 25/05/2007, 11h07
  2. Import problème avec le projet d'import
    Par IM007 dans le forum 4D
    Réponses: 3
    Dernier message: 22/05/2007, 13h29
  3. [Macro]Problème d'importation .CSV avec macro
    Par Eric Harvey dans le forum VBA Access
    Réponses: 8
    Dernier message: 12/04/2007, 17h04
  4. [CSV] importation CSV avec des guillemets
    Par trash_board dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2006, 14h08
  5. Importer librairies avec LCC WIN32
    Par Jiraiya42 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 02/10/2005, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo