J'ai un fichier d'entrée (sans soumettre - fichier d'entrée typicall). Je voudrais appeler une fonction lorsque vous avez choisi un fichier.
Exemple: je clique sur "Choisir un fichier" -> choisir un fichier -> maintenant le système détecte le changement et appelle une fonction qui imprime toutes ces informations sur le fichier (par exemple le nom de l'image).
Je ne peux pas utiliser ngModel sur le fichier d'entrée, non? Comment faire ça?
Utilisez les éléments suivants dans votre modèle:
<div class="modal-body">
<input type="file" (change)="fileChangeEvent($event)" placeholder="Upload file..." />
<img id="preview" src="" alt="Preview">
</div>
Ensuite, votre composant fileChangeEvent()
comme
public fileChangeEvent(fileInput: any){
if (fileInput.target.files && fileInput.target.files[0]) {
var reader = new FileReader();
reader.onload = function (e : any) {
$('#preview').attr('src', e.target.result);
}
reader.readAsDataURL(fileInput.target.files[0]);
}
}
Toutes les informations liées à votre fichier se consoleront ....
Voici mes amendements à la réponse de Double H pour ne pas compter sur jQuery et arrêter les erreurs du webpack sur e.target.result.
<img [src]="imageSrc" alt="" />
<input type="file" capture="camera" accept="image/*" (change)="displayPhoto($event)">
Code TypeScript
displayPhoto(fileInput) {
if (fileInput.target.files && fileInput.target.files[0]) {
const reader = new FileReader();
reader.onload = ((e) => {
this.imageSrc = e.target['result'];
});
reader.readAsDataURL(fileInput.target.files[0]);
}
}
La fonction de Double H n'a pas fonctionné pour moi jusqu'à ce que j'ajoute onclick = "this.value = null" comme on le trouve ici: https://stackoverflow.com/a/42357862/63465