javascript - 如何过滤由 Javascript/typescript 中的目录选择器选择的 FileList 对象?

标签 javascript angular typescript

<分区>

我正在尝试从 FileList 对象中过滤或删除一些文件。我得到了一个 FileList 对象形式的目录选择器。

<input type="file" accept="image/*" webkitdirectory directory multiple>

在我的 .ts 文件中:

public fileChangeListener($event: any) {
 let selectedFiles=$event.target.files; //Object of Filelist
}

selectedFileList 包含不同类型的文件,如 image/jpg、image/png、application/javascript、application/pdf 等。我想获得一个只有图像类型文件的 FileList 对象。我怎样才能得到它?

注意:HTML 输入元素中的 accept="image/*"在这里不起作用。

{
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",
}

在我的代码中error: files.slice is not a function

最佳答案

使用spread operator ...FileList 转换为Array 并通过检查其是否type 包含子文本 'image'

   var files = e.target.files;
   files = [...files].filter( s => s.type.includes("image") )

演示

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>

编辑

如果您的浏览器不支持扩展运算符,请使用以下之一

files = Array.from(files).filter( function(s){ 
    return s.type.includes("image") ;
});

或者

files = [].slice.call(files).filter( function(s){ 
    return s.type.includes("image") ;
});

关于javascript - 如何过滤由 Javascript/typescript 中的目录选择器选择的 FileList 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49750061/

相关文章:

angular - 与客户类型一样

html - Angular 5 按钮提交按回车键

带有约束的 typescript 通用没有键

javascript - Angular 构建的 Visual Studio Code 'experimentalDecorators' 问题

javascript - Ajax在php中发布 undefined index

Angular 2+ 仅在变化时订阅 observable

javascript - JQuery/infinitescroll 和同位素 - 检查重复项并删除

typescript - ArrayBufferLike 的 typescript 定义的深层含义

javascript - 如何在 OBJLoader 加载的对象上应用纹理?

javascript - Ionic 3 导航 Controller 弹出两次,模式的历史记录不一致