我有angularjs應用程序,用戶應該能夠從文本文件導入數據。在上傳之前,我想從客戶端的文件中讀取幾行來做一些驗證。我正在使用https://github.com/nervgh/angular-file-upload上傳文件。我可以上傳文件並在服務器端進行驗證,但文件可能只有幾兆字節大小,如果數據無效,我不想創建不必要的流量。在上傳之前解析angularjs控制器中的文件
在我的控制器我有下面的代碼:
$scope.validateFile = function(file){
console.log(file.name);
console.log(file.size);
var reader = new FileReader();
reader.onloadend = function(evt){
console.log(evt.target.result);
//do something with file content here
};
//var blob = file.slice(0, file.size - 1);
reader.readAsText(file);
};
執行時,控制檯輸出文件名稱和大小。從那以後,我得到了follwoing錯誤:
TypeError: Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'.
當我刪除從以下線路評論...
var blob = file.slice(0, file.size - 1);
和改變的最後一行是:
reader.readAsText(blob);
這是來自控制檯的錯誤
TypeError: undefined is not a function
它看起來像切片功能不起作用。爲什麼slice()不起作用?是否有可能這樣做?
UPDATE:
基於DTing的評論,我發現一個錯誤
我原來的HTML被
<input type="file" nv-file-select="" uploader="uploader" multiple /><br/>
...
<tr ng-repeat="item in uploader.queue">
...
ng-click="validateFile(item.file)"
我已經最後一行改爲
ng-click="validateFile(item._file)"
現在作品。
你的代碼應該可以工作,所以你可能不會傳入一個文件到函數中。 'console.log(文件)'給你什麼? – DTing 2015-04-03 09:17:30
謝謝你的回答。這是輸出的第一部分: FileLikeObject {lastModifiedDate:Fri Apr 03 2015 11:21:48 GMT + 0200(中歐夏令時),大小:47,輸入:「text/plain」,名稱:「test.txt 「,_createFromFakePath:function ...} – 2015-04-03 09:24:33
你沒有傳入你正在傳遞的文件,角度文件上傳用來表示複製名稱和大小的文件。除非你提供更多的代碼,並且我們看到你在調用這個函數的地方和方法,否則不能真正幫助解決這個問題。 – DTing 2015-04-03 09:33:04