Node WebKit应用程序中的docompress-zip无法解压缩下载的文件,下载文件" corrupt"根据WinRAR

时间:2016-04-18 19:49:58

标签: ajax node.js zip node-webkit compression

我试图为* .exe文件编写自动安装程序。我使用的是node-webkit,我的unzipper是decompress-zip。我正在通过AJAX下载安装程序:

$.ajax({
    type: "GET",
    url: 'https://mywebste.com/SyncCtrl.zip',
    contentType: "application/zip;",
    success: function (dat) {
      console.log(dat)
      fs.writeFile("./SyncCtrl.zip", dat, function () {
        console.log(dat)
      })
    },
    error: function (err) {
      console.log(err)
      fs.writeFile("./SyncCtrl.zip", err.responseText, function () {

      })
    }
  })

.zip是通过err.responseText内容编写的。我知道这不是最好的做法,但即使响应代码为200,我也无法将其纳入成功回调中。但这是另一个问题。

将.zip文件写入磁盘后,我等待验证请求,然后在成功回调中将其解压缩:

var unzip = new dc("./SyncCtrl.zip")

        unzip.on('error', function (err) {
          console.log("Something went terribly wrong.")
          console.log(err)
        })

        unzip.on('extract', function (log) {
          console.log("Finished!")
          console.log(log)
        })

        unzip.on('progress', function (i, c) { //index, count (irrelevant for single file)
          console.log("Extraction progress.")
        })

        unzip.extract({
          path: "./SyncCtrl"
        })

这几乎是直接从decompress-zip github页面复制/粘贴的。这会失败,在它打印的错误处理程序中:

Error {message: "File entry unexpectedly large: 80606 (max: 4096)"}

我认为这个限制是以MB为单位的?这非常令人困惑,因为在两个位置,磁盘上的文件大小对于我试图提取的文件是1.7MB。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

实现此目的的最佳方法是将静态文件解释为流。

只需使用服务器上的静态文件,这就是我的工作node-webkit代码:

  var file = fs.createWriteStream("./MOCSyncCtrl.zip");
  var request = https.get("https://moc.maps-adr.com/MOCSyncCtrl.zip", function (response) {
    response.pipe(file);
  });