2013-06-05 182 views
17

我需要讀取用戶給出的一些csv文件。文件傳遞到網頁/腳本使用拖放DIV,處理該文件放置如下:將參數傳遞給FileReader onload事件

function handleFileDrop(evt) { 
    evt.stopPropagation(); 
    evt.preventDefault(); 
    var files = evt.dataTransfer.files; // FileList object. 
    ... 
} 

我需要解析與它轉換成一個陣列的CSV庫中的每個文件,但我也需要跟蹤我目前解析的文件名。這裏是我用來解析每個文件的代碼:

for(var x = 0; x < files.length; x++){ 
    var currFile = files[x]; 
    var fileName = currFile.name; 
    var reader = new FileReader(); 
    reader.onload = (function(theFile){ 
     return function(e){ 
      var csvArr = CSV.csvToArray(e.target.result, ";", true); 
      console.log(csvArr); 
     }; 
    })(currFile); 
    reader.readAsText(currFile); 
} 

在此之前,一切正常。我需要的是文件名也傳遞給reader.onload事件,如:

reader.onload = (function(theFile){ 
    return function(e){ 

     ***** I need to have fileName value HERE ***** 

    }; 
})(currFile); 

是可能的?我怎樣才能做到這一點?在此先感謝您的幫助,最好的問候

回答

43

嘗試以下操作:

var reader = new FileReader(); 
reader.onload = (function(theFile){ 
    var fileName = theFile.name; 
    return function(e){ 
     console.log(fileName); 
     console.log(e.target.result); 
    }; 
})(currFile); 
reader.readAsText(currFile); 

在這裏,你要創建一個文件傳遞給外部方法的新fileName變量各一次。然後創建一個訪問該變量(由於關閉)並返回的函數。

+0

天才!非常感謝,我拉着我的頭髮試圖做到這一點。我想我現在開始明白關閉了! – Fiver

+2

如何獲取文件名和reader.result值? – PatriceG

+0

我無法遵循代碼,'theFile'從哪裏來?我可以看到currFile在哪裏定義,但'theFile'與什麼關聯? – NiallJG