2017-05-27 76 views
0

我想允许用户通过Ajax上传多个文件。如果某些文件太大,我想将它们从上传列表中删除。我怎么能这样做呢?我目前对于我的输入字段具有以下内容。从文件上传中删除大文件

<input id="file" type="file" onChange={this.handleChange.bind(this)} required multiple /> 

到目前为止,我想出了这样的事情,以确认哪些文件过大:

handleChange(event) { 
    const target = event.target; 

    if (target.type === 'file'){ 
     console.log("FILES") 
     const files = target.files 
     console.log("The following files are too large") 
     for (let i=0; i < files.length; i++){ 
      if (files[i].size > 50000){ 
       console.log(files[i].name) 
      } 
     } 
    } 
} 

我感到困惑的是文件的处理方式,因为它们不是真正的链接的东西到文件系统上的实际文件。文件结构如何工作?如何将良好的文件存储到可使用Ajax上传的新文件结构中?

回答

0

target.files只是一个数组。您可以简单地对其进行过滤,删除不需要的文件,然后对新数组执行任何操作(例如,将其存储在组件的状态中)。

const files = target.files.filter(file => file.size <= 50000); 
this.setState({files}); 
// or uploadFiles(files) 

如果你问如何通过一个XMLHttpRequest实际发送的文件,这可以用FormData完成:

const data = new FormData(); 
files.forEach(file => data.append(file.name, file)); 

,然后通过XMLHttpRequest对象发送FormData对象。