15

I want get the file name from my html input tag in a modal view and save it using Angular2. Can someone help me?

Sangwin Gawande
  • 7,658
  • 8
  • 48
  • 66
iamlordsandro
  • 351
  • 1
  • 3
  • 11

6 Answers6

36

You can do next:

HTML:

<input type="file" (change)="fileEvent($event)" />

TypeScript:

fileEvent(fileInput: Event){
    let file = fileInput.target.files[0];
    let fileName = file.name;
}
mvermand
  • 5,829
  • 7
  • 48
  • 74
Igor Janković
  • 5,494
  • 6
  • 32
  • 46
3

You can try a more elegant option:

HTML:

<input #file type="file" (change)="updateFile(file)">

Script:

updateFile(file: HTMLInputElement) {
  let name = file.value;
}
3

HTML

<button (click)="imgFileInput.click()">Add</button>
    {{ imgFileInput?.files[0]?.name }}
<input hidden type="file" #imgFileInput (change)="uploadSingle($event)"/>

Component

uploadSingle(event) {
  const fileName = event.target.files[0].name;
}
  • Please explain your lines of code so other users can understand its functionality. Thanks! – Ignacio Ara May 31 '18 at 07:46
  • This is totally unnecessary. A label with the for attribute will do the job without catching any clicks. Also I'm not completely sure you can trigger a click on a hidden element. – Sampgun Feb 19 '19 at 16:30
1

HTML

<input type="file" (change)="onFileChange($event)">

Script

onFileChange(event) {    
     let files = event.target.files[0].name;
}
Vivek Singh
  • 1,113
  • 10
  • 20
1

This work form me:

HTML

<input type="file" (change)="detectFiles($event)">
<div class="output">Seleccionado: {{ fileName }} </div>

TS

selectedFiles: FileList;
fileName: string;

detectFiles(event) {
    this.selectedFiles = event.target.files;
    this.fileName = this.selectedFiles[0].name;
    console.log('selectedFiles: ' + this.fileName );
  }
Alvargon
  • 324
  • 3
  • 10
0

This link's https://stackoverflow.com/a/44932086/4281182 solution suggested by @ Selçuk Cihan did not help so my workaround was to make the fileInput param type "any" by doing this

fileEvent(fileInput){
    let file = fileInput.target.files[0];
    let fileName = file.name;
}

so in TS runtime this is a pure JS code

Anyways thanks for this great ans it saved me a lot of time