如何从 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。

编辑 2extractArchive,为 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]);
  // ...
})