在javascript中使用JSZIP提取压缩文件

问题描述 投票:5回答:2

在我的网页中,用户应该上传压缩文件。在压缩文件中有2个文件:另一个zip文件和一个txt文件。在我的服务器上,收到zip后,我想解压缩zip文件以解压zip&txt文件,然后将这2个文件移动到预定义的文件夹中。我有一段代码提取zip文件,但数据似乎不正确。首先,当只有1个txt文件时,它解压缩了一个zip和2个txt文件。它创建了一个额外的“未定义”txt文件。此外,在我的txt文件中,它替换为原始数据,而是替换为以下文本:'[undefined] [undefined]'。 谁可以帮我这个事?以下是我的代码:

var JSZip = require('JSZip');

fs.readFile( filePath, function(err, data){
  if (!err){
    var zip = new JSZip();
    JSZip.loadAsync(data).then(function(zip){
      object.keys(zip.files).forEach(function(filename){
        var content = zip.files[filename];
        var dest = path + filename;
        fs.writeFileSync(dest, content);
      });
    });
  }
});
javascript unzip jszip
2个回答
6
投票

他们在文档中花了一些时间,但是他们有an example,它展示了如何从ZIP中读取文件内容。

您将获得描述ZIP内容但不包含实际内容的对象。这是一个调整版本:

var JSZip = require('JSZip');

fs.readFile{ filePath, function(err, data) {
  if (!err) {
    var zip = new JSZip();
    zip.loadAsync(data).then(function(contents) {
      Object.keys(contents.files).forEach(function(filename) {
        zip.file(filename).async('nodebuffer').then(function(content) {
           var dest = path + filename;
           fs.writeFileSync(dest, content);
        }); 
      });
    });
  }
});

13
投票

这是我正在使用的工作版本:

var jsZip = require('jszip')
jsZip.loadAsync(file).then(function (zip) {
  Object.keys(zip.files).forEach(function (filename) {
    zip.files[filename].async('string').then(function (fileData) {
      console.log(fileData) // These are your file contents      
    })
  })
})

你可以从http://stuk.github.io/jszip/documentation/examples.html获得你需要的大部分信息,但是在一个地方有点困难,你必须环顾四周。

© www.soinside.com 2019 - 2024. All rights reserved.