webentwicklung-frage-antwort-db.com.de

Konvertieren eines Bildes in Base64 in Winkel 2

Beim Konvertieren eines Bildes in Base64 in Winkel 2 wird das Bild von local hochgeladen. Zur Zeit verwende ich fileLoadedEvent.target.result. Das Problem ist, wenn ich diese base64-Zeichenfolge über REST -Dienste an Java sende, kann sie nicht decodiert werden. Wenn ich diesen base64-String mit freiem Online-Encoder-Decoder versuche, kann ich auch kein decodiertes Bild sehen. Ich habe auch versucht Leinwand zu benutzen. Ich bekomme kein richtiges Ergebnis. Eines ist sicher, dass die base64-Zeichenfolge nicht richtig ist. Muss ich dazu ein Paket hinzufügen? Oder in Winkel 2 gibt es einen speziellen Weg, um das Bild in base64 zu kodieren, wie es in Winkel 1 - Winkel-Base64-Upload-Paket war.

Bitte finden Sie unten meinen Beispielcode

onFileChangeEncodeImageFileAsURL(event:any,imgLogoUpload:any,imageForLogo:any,imageDiv:any)
{
    var filesSelected = imgLogoUpload.files;
    var self = this;
    if (filesSelected.length > 0) {
      var fileToLoad = filesSelected[0]; 

      //Reading Image file, encode and display
       var  reader: FileReader = new FileReader();
       reader.onloadend = function(fileLoadedEvent:any) {

       //SECOND METHO
       var imgSrcData = fileLoadedEvent.target.result; // <--- data: base64 

        var newImage = imageForLogo;
        newImage.src = imgSrcData;
        imageDiv.innerHTML = newImage.outerHTML;

      }
      reader.readAsDataURL(fileToLoad);
    }
}
8
lakshmi

Arbeitsplunkr für base64 String

https://plnkr.co/edit/PFfebmnqH0eQR9I92v0G?p=preview

  handleFileSelect(evt){
      var files = evt.target.files;
      var file = files[0];

    if (files && file) {
        var reader = new FileReader();

        reader.onload =this._handleReaderLoaded.bind(this);

        reader.readAsBinaryString(file);
    }
  }



  _handleReaderLoaded(readerEvt) {
     var binaryString = readerEvt.target.result;
            this.base64textString= btoa(binaryString);
            console.log(btoa(binaryString));
    }
29
Parth Ghiya

Ich habe die Antwort von Parth Ghiya etwas modifiziert, so dass Sie 1 - 1 Bilder hochladen können, die alle in einem Array als Base64-kodierte Zeichenfolgen gespeichert sind

base64textString = [];

onUploadChange(evt: any) {
  const file = evt.target.files[0];

  if (file) {
    const reader = new FileReader();

    reader.onload = this.handleReaderLoaded.bind(this);
    reader.readAsBinaryString(file);
  }
}

handleReaderLoaded(e) {
  this.base64textString.Push('data:image/png;base64,' + btoa(e.target.result));
}

HTML-Datei

<input type="file" (change)="onUploadChange($event)" accept=".png, .jpg, .jpeg, .pdf" />
<img *ngFor="let item of base64textString"  src={{item}} alt="" id="img">
2
Johansrk

eine andere Lösung, die für base64 funktioniert, ist so etwas wie dieser Beitrag https://stackoverflow.com/a/36281449/6420568

in meinem Fall habe ich getan

getImagem(readerEvt, midia){
    //console.log('change no input file', readerEvt);
    let file = readerEvt.target.files[0];
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = function () {
        //console.log('base64 do arquivo',reader.result);
        midia.binario = btoa(reader.result);
        //console.log('base64 do arquivo codificado',midia.binario);
    };
    reader.onerror = function (error) {
        console.log('Erro ao ler a imagem : ', error);
    };
}

und HTML-Komponente

<input type="file" class="form-control"  (change)="getImagem($event, imagem)">

<img class="img-responsive"  src="{{imagem.binario | decode64 }}" alt="imagem..." style="width: 200px;"/>

um das bild anzuzeigen, habe ich die pipe decode64 erstellt

@Pipe({
  name: 'decode64'
})
export class Decode64Pipe implements PipeTransform {
  transform(value: any, args?: any): any {
    let a = '';
    if(value){
       a = atob(value);
    }
    return a;
  }
}
1
Ewertom Moraes

Haben Sie versucht, das Image mit btoa oder Crypto.js in base64 zu kodieren?

link zu Cryptojs - https://code.google.com/archive/p/crypto-js/

var imgSrcData = window.btoa(fileLoadedEvent.target.result);

oder var imgSrcData = CryptoJS.enc.Base64.stringify(fileLoadedEvent.target.result);

1
Ben Humphries

Ich habe eine Antwort mit dem Aufrufen der HTTP-Anfrage für die Post-Methode mit einem JSON

1.event param kommt aus dem HTML-Input-Tag.
2. self.imagesrc ist eine Komponentenvariable, um die Daten zu speichern und diese in der Header-Datei zu verwenden. Wir müssen das "this" in eine Self-Variable umwandeln und im Reader verwenden. Onload-Funktion
3. this.server ist die API-Aufrufdienst-Komponentenvariable, die ich in dieser Komponente verwendet habe

UploadImages(event) {
    var file = event.target.files[0];
    var reader = new FileReader();
    reader.readAsDataURL(file);
    var self = this;
    reader.onload = function() {
      self.imageSrc = reader.result.toString();
    };

    var image_data = {
      authentication_token: this.UD.getAuth_key ,
      fileToUpload: this.imageSrc,
      attachable_type: "Photo"
    };

    this.server.photo_Upload(image_data).subscribe(response => {
      if (response["success"]) {
        console.log(response);
      } else {
        console.log(response);
      }
    });
  }
0