angularjs 多文件上传和解析
angularjs multi upload file and parsing
我制作了一个带有多个上传 csv 文件的界面(完成)。
必须使用使用 $q(完成)的自定义 fileReader
服务将此 CSV 文件加载到导航客户端,然后使用 ngPapaParser
(完成)解析并显示在视图中ngTable
(已完成但未在示例中简化)。
这是一个 plunkr,显示了我遇到的错误:http://plnkr.co/edit/YVvitZ2yfxjJw76n6t9F?p=preview
问题是需要在 fileReader.readAsText
承诺中获取文件名,但我不知道如何获取它。
controller('MainCtrl', function($scope, Papa,fileReader) {
$scope.parsedResults = [];
$scope.getFiles = function (files) {
$scope.parsedResults = [];
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
console.log(f.name); // ok her
fileReader.readAsText(f, $scope).then(function(resultText) {
Papa.parse(resultText, {
header: true,
// worker: true,
skipEmptyLines: true,
complete: function(result) {
var cols= [];
for(var i in result.meta.fields){
cols.push({
field: result.meta.fields[i] , title: result.meta.fields[i].toLowerCase() , show: true
});
}
console.log(f.name); // undefined her in the callback
//I WANT THE FILENAME HER !!!
var io = { 'filename': 'f.name unknow' ,'cols':cols ,'tableParams': result.data } ;
$scope.parsedResults.push(io);
}
});
});
}
};
});
如何让下面的函数返回一个 promise 和文件?
var readAsText = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsText(file);
// how to return an object her, or the deferred promise and the file ?
return deferred.promise;
};
试试这个:
var readAsText = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsText(file);
// then will return another promise with content and file available
return deferred.promise.then(function(result){
return {
content: result,
file: file
};
});
};
您可以按如下方式使用它:
readAsText(file, $scope).then(function(result){
var content = result.content;
var file = result.file;
//...
})
我制作了一个带有多个上传 csv 文件的界面(完成)。
必须使用使用 $q(完成)的自定义 fileReader
服务将此 CSV 文件加载到导航客户端,然后使用 ngPapaParser
(完成)解析并显示在视图中ngTable
(已完成但未在示例中简化)。
这是一个 plunkr,显示了我遇到的错误:http://plnkr.co/edit/YVvitZ2yfxjJw76n6t9F?p=preview
问题是需要在 fileReader.readAsText
承诺中获取文件名,但我不知道如何获取它。
controller('MainCtrl', function($scope, Papa,fileReader) {
$scope.parsedResults = [];
$scope.getFiles = function (files) {
$scope.parsedResults = [];
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
console.log(f.name); // ok her
fileReader.readAsText(f, $scope).then(function(resultText) {
Papa.parse(resultText, {
header: true,
// worker: true,
skipEmptyLines: true,
complete: function(result) {
var cols= [];
for(var i in result.meta.fields){
cols.push({
field: result.meta.fields[i] , title: result.meta.fields[i].toLowerCase() , show: true
});
}
console.log(f.name); // undefined her in the callback
//I WANT THE FILENAME HER !!!
var io = { 'filename': 'f.name unknow' ,'cols':cols ,'tableParams': result.data } ;
$scope.parsedResults.push(io);
}
});
});
}
};
});
如何让下面的函数返回一个 promise 和文件?
var readAsText = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsText(file);
// how to return an object her, or the deferred promise and the file ?
return deferred.promise;
};
试试这个:
var readAsText = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsText(file);
// then will return another promise with content and file available
return deferred.promise.then(function(result){
return {
content: result,
file: file
};
});
};
您可以按如下方式使用它:
readAsText(file, $scope).then(function(result){
var content = result.content;
var file = result.file;
//...
})