上传前在 angularjs 控制器中解析文件
parse file in angularjs controller before upload
我有 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)"
现在可以了。
查看 File API 规范,FileReader 部分:https://developer.mozilla.org/en-US/docs/Web/API/FileReader
它有许多 .readAsXXX 方法,这些方法应该允许您在将文件上传到服务器之前检查文件的内容。
我有 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)"
现在可以了。
查看 File API 规范,FileReader 部分:https://developer.mozilla.org/en-US/docs/Web/API/FileReader
它有许多 .readAsXXX 方法,这些方法应该允许您在将文件上传到服务器之前检查文件的内容。