2016-11-15 16 views
0

Я пытаюсь получить объект csv-файла из zipobject, который я извлек из zip-файла с помощью jszip.But Теперь я не могу прочитать фактический файл csv из этого zipobject Может ли кто-нибудь помочь? это мой zipobject, enter image description hereКак получить объект csv-файла из zipobject в jszip и angularjs

<!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>

Это мой код.

ответ

1

Используйте метод async, чтобы получить обещание о содержании (которые ведут себя как $q):

zip.file("Positions.csv").async("text") 
.then(function success(txt) { 
    console.log("csv is", txt); 
}, function error(e) { 
    console.error(e); 
}); 

Edit: приведенный выше код для JSZip v3, вы используете JSZip v2:

var txt = zip.file("Positions.csv").asText(); 
console.log("csv is", txt); 

zip.file("Positions.csv") предоставит вам ZipObject, который вы покажете на изображении.

Edit 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]); 
    // ... 
}) 
+0

Спасибо за ответ. Откуда появился 'zip'? –

+0

Могу ли я получить 'csv' в формате файла? –

+0

Что вы имеете в виду в формате файла? Как Blob, готовый для 'saveAs'? Это будет 'var buf = zip.file (...). AsArrayBuffer(); var blob = new Blob ([buf]); 'Смотрите [старую документацию] (https://github.com/Stuk/jszip/blob/v2.6.1/documentation/api_zipobject.md) для доступных геттеров. Я также обновил свой ответ для используемой версии JSZip. –

 Смежные вопросы

  • Нет связанных вопросов^_^