angular - ¿Cómo filtrar un objeto FileList elegido por el selector de directorios en Javascript/typescript?
Estoy tratando de filtrar o eliminar algunos archivos del objeto FileList. He obtenido un objeto FileList del selector de directorio.
<input type="file" accept="image/*" webkitdirectory directory multiple>
En mi archivo .ts:
public fileChangeListener($event: any) {
let selectedFiles=$event.target.files; //Object of Filelist
}
selectedFileList contiene diferentes tipos de archivos como image/jpg, image/png, application/javascript, application/pdf, etc. Quiero obtener un objeto FileList con solo archivos de tipo imagen. ¿Cómo puedo obtenerlo?
nota: accept="image/*" en el elemento input de HTML no funciona aquí.
{
lastModified:1521624250148,
lastModifiedDate:Wed Mar 21 2018 15:24:10 GMT+0600 (+06) {},
name:"rxlnn70l.bmp",
size:814138,
type:"image/bmp",
webkitRelativePath:"second/rxlnn70l.bmp",
}
Aquí en mi código error: files.slice no es una función
Respuesta #1
Usa el operador de propagación ... para convertir FileList en Array y filtrar lo mismo comprobando si su type contiene el subtexto 'image'.
var files = e.target.files;
files = [...files].filter( s => s.type.includes("image") )
Demostración
document.querySelector( "[type='file']" ).addEventListener( "change", function(e){
var files = e.target.files;
files = [...files].filter( s => s.type.includes("image") )
console.log(files);
})<input type="file" accept="image/*" webkitdirectory directory multiple>Editar
Si el operador de propagación no es compatible con tu navegador, entonces usa uno de los siguientes
files = Array.from(files).filter( function(s){
return s.type.includes("image") ;
});
O
files = [].slice.call(files).filter( function(s){
return s.type.includes("image") ;
});
