Converting an image to base64 in angular 2

后端 未结 7 522
醉话见心
醉话见心 2020-11-30 05:31

Converting an image to base64 in angular 2, image is uploaded from local . Current am using fileLoadedEvent.target.result. The problem is, when I send this base64 string thr

相关标签:
7条回答
  • 2020-11-30 05:34

    I have a come up with an answer with calling the HTTP request for post method with a json

    1.event param is coming from the HTML input tag.
    2. self.imagesrc is a component variable to store the data and to use that in the header file we need to cast the "this" to a self variable and use it in the reader. Onload function
    3. this.server is the API calling service component variable I used in this component

    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 讨论(0)
  • 2020-11-30 05:35

    Working plunkr for 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));
        }
    
    0 讨论(0)
  • 2020-11-30 05:43

    Please consider using this package: image-to-base64

    Generate a image to base64, you can make this using a path or url.

    Or this accepted answer

    0 讨论(0)
  • 2020-11-30 05:44

    another solution thats works for base64 is something like this post https://stackoverflow.com/a/36281449/6420568

    in my case, i did

    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);
        };
    }
    

    and html component

    <input type="file" class="form-control"  (change)="getImagem($event, imagem)">
    
    <img class="img-responsive"  src="{{imagem.binario | decode64 }}" alt="imagem..." style="width: 200px;"/>
    

    to display the image, i created the pipe decode64

    @Pipe({
      name: 'decode64'
    })
    export class Decode64Pipe implements PipeTransform {
      transform(value: any, args?: any): any {
        let a = '';
        if(value){
           a = atob(value);
        }
        return a;
      }
    }
    
    0 讨论(0)
  • 2020-11-30 05:49

    I modified Parth Ghiya answer a bit, so you can upload 1- many images, and they are all stored in an array as base64 encoded strings

    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 file

    <input type="file" (change)="onUploadChange($event)" accept=".png, .jpg, .jpeg, .pdf" />
    <img *ngFor="let item of base64textString"  src={{item}} alt="" id="img">
    
    0 讨论(0)
  • 2020-11-30 05:55

    Here is the same code from Parth Ghiya but written in ES6/TypeScript format

    picture: string;
    handleFileSelect(evt){
        const file = evt.target.files[0];
        if (!file) {
            return false;
        }
        const reader = new FileReader();
        
        reader.onload = () => {
            this.picture = reader.result as string;
        };
    
        console.log(btoa(this.picture));
    }
    
    0 讨论(0)
提交回复
热议问题