如何从 jszip 和 angularjs 中的 zipobject 获取 csv 文件对象
How to get csv file object from zipobject in jszip and angularjs
我正在尝试从使用 jszip.But 从 zip 文件中提取的 zipobject 获取 csv 文件对象,现在我无法从这个 zipobject.Can 读取实际的 csv 文件 有人帮忙吗?
这是我的 zipobject,
<!DOCTYPE html>
<html data-ng-app="myApp">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script data-require="jszip@2.4.0" data-semver="2.4.0" src="https://cdn.rawgit.com/Stuk/jszip/v2.4.0/dist/jszip.js"></script>
</head>
<body data-ng-controller="testController">
<div>
<input type="file" name="archiveUpload" id="archiveUpload01">
</div>
<script>
angular
.module('myApp', [])
.run(function($rootScope) {
$rootScope.title = 'myTest Page';
})
.controller('testController', ['$scope', '$q',
function($scope, $q) {
$scope.extractArchive = function(zipfile) {
var dfd = $q.defer();
var reader = new FileReader();
reader.onerror = dfd.reject.bind(dfd);
reader.onload = function(e) {
if (!reader.result) dfd.reject(new Error("Unknown error"));
var zip = new JSZip(reader.result);
return dfd.resolve(zip);
};
reader.readAsArrayBuffer(zipfile);
return dfd.promise;
}
function onArchiveChange(evt) {
var target = evt.dataTransfer || evt.target;
var file = target && target.files && target.files[0];
$scope.extractArchive(file)
.then(function(zipFile) {
console.log(zipFile)
})
}
angular.element(document.querySelector('#archiveUpload01')).on('change', onArchiveChange);
}
])
</script>
</body>
</html>
这是我的代码。
使用async
method to get a promise of the content (which behave like $q
):
zip.file("Positions.csv").async("text")
.then(function success(txt) {
console.log("csv is", txt);
}, function error(e) {
console.error(e);
});
编辑:上面的代码是JSZip v3,你用JSZip v2:
var txt = zip.file("Positions.csv").asText();
console.log("csv is", txt);
zip.file("Positions.csv")
将为您提供在图像上显示的 ZipObject。
编辑 2:extractArchive
,为 JSZip v3 编写,看起来像:
$scope.extractArchive = function(zipfile) {
return JSZip.loadAsync(zipfile); // JSZip v3 can read Blobs and Files
}; // returns a promise of a JSZip instance
然后您可以链接其他承诺:
$scope.extractArchive(zipfile).then(function (zip) {
return zip.file("Positions.csv").async("arraybuffer");
}).then(function (buf) {
var blob = new Blob([buf]);
// ...
})
我正在尝试从使用 jszip.But 从 zip 文件中提取的 zipobject 获取 csv 文件对象,现在我无法从这个 zipobject.Can 读取实际的 csv 文件 有人帮忙吗?
这是我的 zipobject,
<!DOCTYPE html>
<html data-ng-app="myApp">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script data-require="jszip@2.4.0" data-semver="2.4.0" src="https://cdn.rawgit.com/Stuk/jszip/v2.4.0/dist/jszip.js"></script>
</head>
<body data-ng-controller="testController">
<div>
<input type="file" name="archiveUpload" id="archiveUpload01">
</div>
<script>
angular
.module('myApp', [])
.run(function($rootScope) {
$rootScope.title = 'myTest Page';
})
.controller('testController', ['$scope', '$q',
function($scope, $q) {
$scope.extractArchive = function(zipfile) {
var dfd = $q.defer();
var reader = new FileReader();
reader.onerror = dfd.reject.bind(dfd);
reader.onload = function(e) {
if (!reader.result) dfd.reject(new Error("Unknown error"));
var zip = new JSZip(reader.result);
return dfd.resolve(zip);
};
reader.readAsArrayBuffer(zipfile);
return dfd.promise;
}
function onArchiveChange(evt) {
var target = evt.dataTransfer || evt.target;
var file = target && target.files && target.files[0];
$scope.extractArchive(file)
.then(function(zipFile) {
console.log(zipFile)
})
}
angular.element(document.querySelector('#archiveUpload01')).on('change', onArchiveChange);
}
])
</script>
</body>
</html>
这是我的代码。
使用async
method to get a promise of the content (which behave like $q
):
zip.file("Positions.csv").async("text")
.then(function success(txt) {
console.log("csv is", txt);
}, function error(e) {
console.error(e);
});
编辑:上面的代码是JSZip v3,你用JSZip v2:
var txt = zip.file("Positions.csv").asText();
console.log("csv is", txt);
zip.file("Positions.csv")
将为您提供在图像上显示的 ZipObject。
编辑 2:extractArchive
,为 JSZip v3 编写,看起来像:
$scope.extractArchive = function(zipfile) {
return JSZip.loadAsync(zipfile); // JSZip v3 can read Blobs and Files
}; // returns a promise of a JSZip instance
然后您可以链接其他承诺:
$scope.extractArchive(zipfile).then(function (zip) {
return zip.file("Positions.csv").async("arraybuffer");
}).then(function (buf) {
var blob = new Blob([buf]);
// ...
})