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

时间:2015-04-03 08:33:37

标签: javascript angularjs file blob filereader

我有angularjs应用程序,用户应该能够从文本文件中导入数据。在上传之前,我想从客户端的文件中读取几行来进行一些验证。我正在使用https://github.com/nervgh/angular-file-upload上传文件。我可以上传文件并在服务器端进行验证,但文件可能只有几兆字节,如果数据无效,我不想创建不必要的流量。

在我的控制器中,我有以下代码:

$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);

};

执行时,控制台输出文件名和大小。之后我得到了以下错误:

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)"

我已将最后一行更改为

ng-click="validateFile(item._file)"

现在可行。

1 个答案:

答案 0 :(得分:0)

查看File API规范,FileReader部分:https://developer.mozilla.org/en-US/docs/Web/API/FileReader

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