0

I am using ng2-file-upload to upload the image. Everything works well but after i choose image, it'll display selected image thumbnail.

Please review my stackblitz Link

Thanks in Advance

Hassan Siddiqui
  • 2,799
  • 1
  • 13
  • 22
kumara
  • 877
  • 4
  • 19
  • 43

3 Answers3

4

You can look out this demo may this helps you

Template file:

img element to show image preview

<img [src]="previewImg" *ngIf="previewImg"/>

Class file:

URL.createObjectURL() is a static method that creates a DOMString containing a URL representing the object given in the parameter.

bypassSecurityTrustUrl Bypass security and trust the given value to be a safe style URL, i.e. a value that can be used in hyperlinks or <img src>.

constructor(private sanitizer: DomSanitizer) {} // inject the DomSanitizer

 previewImg: SafeUrl;
 this.uploader.onAfterAddingFile = (file) => {
      console.log('***** onAfterAddingFile ******')
      this.previewImg = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(file._file)));;
 }

Dont forget to include import { DomSanitizer, SafeUrl } from '@angular/platform-browser';

Saurabh Yadav
  • 3,303
  • 1
  • 10
  • 20
2

Here is the answer when your image is ready using FileReader show the thumbnail

import { Component, OnInit } from '@angular/core';

import {FileUploader} from 'ng2-file-upload';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit  {
  url = 'https://evening-anchorage-3159.herokuapp.com/api/';
  ready = false;
  thumb="";
  uploader = new FileUploader({
    url: this.url,
    maxFileSize: 1024 * 1024 * 1
    });
  name = 'Angular 5';

  ngOnInit() {
    this.uploader.onAfterAddingFile = (file) => {
      console.log('***** onAfterAddingFile ******')
      var image_file=file._file
      const reader = new FileReader();
     reader.addEventListener('load', () => {
      console.log(reader.result)
      this.ready=true;
      this.thumb=reader.result.toString();
    });
    reader.readAsDataURL(image_file);
    }

    this.uploader.onCompleteItem =  (item:any, response:any, status:any, headers:any) => {
      console.log('ImageUpload:uploaded:', item, status, response);
    };

    this.uploader.onCompleteAll = () => {
      console.log('******* onCompleteAll *********')
    }

    this.uploader.onWhenAddingFileFailed = (item: any, filter: any, options: any) => {
      console.log('***** onWhenAddingFileFailed ********')
    }
  }
}

Your HTML looks like this

<hello name="{{ name }}"></hello>

<p>Maximun allowed file size is 1MB</p>
<img [src]="thumb" *ngIf="ready"/>
<input type="file" ng2FileSelect [uploader]="uploader">


<button (click)="uploader.uploadAll()">Upload </button>
HaSnen Tai
  • 1,353
  • 2
  • 14
  • 22
0

I got the solution ,

I have tested on your https://stackblitz.com/edit/angular-ng2-file-upload , try this it is working

 export class AppComponent implements OnInit  {
      url = 'https://evening-anchorage-3159.herokuapp.com/api/';

      uploader = new FileUploader({
        url: this.url,
        maxFileSize: 1024 * 1024 * 1
        });
      name = 'Angular 5';
      //added this two variable here
      imageUrlOfLogo:string='';
      logoFileNameFile?: File;
      ngOnInit() {
        // your own code here
      }
      // added this code here
      handleLogoFileInput(file: any) {
        var item = file.item(0);
        this.logoFileNameFile = file.item(0);
        var reader = new FileReader();
        reader.onload = (event: any) => {
            this.imageUrlOfLogo = event.target.result;
        }
        reader.readAsDataURL(this.logoFileNameFile as File);

    }
}

component.html

<p>Maximun allowed file size is 1MB</p>
  <img [src]="imageUrlOfLogo" style="width:50%; height:90px;" *ngIf="logoFileNameFile">
<input type="file" ng2FileSelect [uploader]="uploader" (change)="handleLogoFileInput($event.target.files)">


<button (click)="uploader.uploadAll()">Upload </button>