我正在尝试从zipobject中获取CSV文件对象,该对象是使用jszip从zip文件中提取的,但是现在我无法从该zipobject中读取实际的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="[email protected]" 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>
这是我的代码。
最佳答案
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:为JSZip v3编写的
extractArchive
看起来像:$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]);
// ...
})