我试图为* .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。非常感谢任何帮助。
答案 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);
});