2017-05-27 45 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對象。