У меня есть приложение 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
Благодарим вас за ответ. Это первая часть вывода: FileLikeObject {lastModifiedDate: Пт Апр 03 2015 11:21:48 GMT + 0200 (Центральноевропейское летнее время), размер: 47, введите: "text/plain", name: "test.txt ", _createFromFakePath: function ...} –
Я не передаю файлы, которые вы передаете в конструкции, которую использует угловая загрузка файла, чтобы представлять файлы, которые копируют имя и размер. Невозможно помочь в этом вопросе, если вы не добавите больше кода, и мы увидим, с чем и с кем вы вызываете эту функцию. – DTing