Javascript 上传前解析angularjs控制器中的文件

Javascript 上传前解析angularjs控制器中的文件,javascript,angularjs,file,blob,filereader,Javascript,Angularjs,File,Blob,Filereader,我有一个angularjs应用程序,用户应该能够从文本文件中导入数据。在上传之前,我想从客户端的文件中读几行代码来做一些验证。我正在使用上传文件。我可以上传文件并在服务器端进行验证,但文件可能只有几兆字节大,如果数据无效,我不想产生不必要的流量 在我的控制器内,我有以下代码: $scope.validateFile = function(file){ console.log(file.name); console.log(file.size); var reader =

我有一个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);

};
执行时,console输出文件名和大小。在此之后,我得到了以下错误:

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()不起作用?有可能这样做吗

更新:

根据DTing的评论,我发现了一个错误

我原来的html是

<input type="file" nv-file-select="" uploader="uploader" multiple  /><br/>
...   
<tr ng-repeat="item in uploader.queue">
...   
ng-click="validateFile(item.file)"

现在它可以工作了。

看看文件API规范,文件阅读器部分:


它有许多.readAsXXX方法,这些方法应该允许您在将文件上载到服务器之前检查文件的内容。

您的代码应该可以工作,因此您可能没有向函数传递文件。
console.log(文件)
给了您什么?谢谢您的回答。这是输出的第一部分:FileLikeObject{lastModifiedDate:Fri Apr 03 2015 11:21:48 GMT+0200(中欧夏季时间),大小:47,类型:“text/plain”,名称:“test.txt”,_createFromFakePath:function…}是的,您没有传入正在传入的文件,而是angular file upload用于表示复制名称和大小的文件的构造。除非你添加更多的代码,我们可以看到你调用这个函数的内容和位置,否则我们无法真正帮助你解决这个问题。事实上,你帮了我很大的忙。正如我所说,我正在使用上传文件。我从乞丐那里传错了值。“uploader”的“File”属性是类似文件的对象,但uploader.\u File实际上是一个文件。我犯了一个大错误,没有按照您的建议输出到控制台“uploader.file”。我假设,如果我有大小和名称,我有文件对象,这是错误的乞讨。非常感谢你做得很好。你应该将这个问题标记为已回答。谢谢btk,这不是我想要的,但它是对原始问题的一个很好的扩展。我知道文件API,我的问题是我使用了一个错误的对象。多亏了DTing,我解决了我的问题。我接受这个答案来结束这个帖子,因为我不能接受DTing的评论。
ng-click="validateFile(item._file)"