Javascript 如何从jszip和angularjs中的zipobject获取csv文件对象

Javascript 如何从jszip和angularjs中的zipobject获取csv文件对象,javascript,angularjs,csv,jszip,Javascript,Angularjs,Csv,Jszip,我正在尝试从zipobject获取csv文件对象,我使用jszip从zip文件中提取了该对象。但是现在我无法从该zipobject读取实际的csv文件。有人能帮忙吗? 这是我的ZipoObject 有棱角的 .module('myApp',[]) .run(函数($rootScope){ $rootScope.title='mytestpage'; }) .controller('testController',['$scope','$q', 功能($scope,$q){ $scope.ex

我正在尝试从zipobject获取csv文件对象,我使用jszip从zip文件中提取了该对象。但是现在我无法从该zipobject读取实际的csv文件。有人能帮忙吗? 这是我的ZipoObject


有棱角的
.module('myApp',[])
.run(函数($rootScope){
$rootScope.title='mytestpage';
})
.controller('testController',['$scope','$q',
功能($scope,$q){
$scope.extractArchive=函数(zipfile){
var dfd=$q.defer();
var reader=new FileReader();
reader.onerror=dfd.reject.bind(dfd);
reader.onload=函数(e){
如果(!reader.result)dfd.reject(新错误(“未知错误”);
var zip=newjszip(reader.result);
返回dfd.resolve(zip);
};
reader.readAsArrayBuffer(zipfile);
回报dfd承诺;
}
ArchiveChange(evt)的功能{
var target=evt.dataTransfer | | evt.target;
var file=target&&target.files&&target.files[0];
$scope.extractArchive(文件)
.then(函数(zipFile){
console.log(zipFile)
})
}
元素(document.querySelector('#archiveUpload01')).on('change',onArchiveChange);
}
])
使用该方法获得内容承诺(其行为类似于:

编辑:上面的代码是针对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]);
  // ...
})

谢谢你的回复。
zip
从哪里来?文件格式是什么意思?作为一个Blob,是否准备好
saveAs
?这将是
var buf=zip.file(…).asArrayBuffer();var blob=新blob([buf])有关可用的getter,请参阅。我还更新了您使用的JSZip版本的答案。如何使用JSZip版本3.1.3加载zip文件以读取其内容?每次我使用
JSZip.loadAsync
返回错误。我编辑了我的答案。如果您在
JSZip.loadAsync
方面仍然存在问题,那么您应该打开另一个问题,以使其他人能够阅读。
$scope.extractArchive(zipfile).then(function (zip) {
  return zip.file("Positions.csv").async("arraybuffer");
}).then(function (buf) {
  var blob = new Blob([buf]);
  // ...
})