我最近开始使用 NW.JS 开发桌面应用程序,我需要从 URL (http://someurl.org/file.zip) 下载文件,我设法保存该文件,但它似乎已损坏或格式错误,并且我无法打开或解压缩它。
我使用 jQuery 下载文件并使用 Node.JS 的“fs”模块来保存它。
这是ajax请求:
module.exports.download = function (jQuery, url) {
return jQuery.ajax({
url : url,
timeout : 1000000
});
};
剩下的就是:
$('#btnUpdateClient')
.click(function () {
ClientDownload
.download($, addresses.CLIENT_URL)
.complete(function (xhr, status) {
console.log(xhr);
fs.writeFile('./files/staClient.zip', xhr.responseText, function (err) {
if(err) {
alert('error!');
console.log(err);
} else {
alert('file Saved!');
}
});
});
});
明显缺少一些东西,.zip 文件是 3.8 MB,但当我 fs.writeFile() 时,文件最终变成 7.3 MB
我对 NW.JS 还很陌生,有什么建议吗?
如果下载进度对您很重要,请使用此:
var http = require('http');
var fs = require('fs');
var req = http.get('http://someurl.org/file.zip', function (res) {
var fileSize = res.headers['content-length'];
res.setEncoding('binary');
var a = "";
res.on('data', function (chunk) {
a += chunk;
document.getElementById('percent').innerHTML = Math.round(100*a.length/fileSize) + "";
});
res.on('end', function() {
fs.writeFile('D:\\file.zip', a, 'binary', function (err) {
if (err) throw err;
console.log('finished');
});
});
});
没关系,我刚刚意识到我什至不需要使用 jQuery,我只是像这样使用 NodeJS:
$('#btnUpdateClient')
.click(function () {
var file = fs.createWriteStream('./files/staClient.zip');
var request = http.get(addresses.CLIENT_URL, function (response) {
response.pipe(file);
});
});
所有这些方法都需要您编写自己的
Save as
对话框窗口。我建议调用 Chrome Extension API 进行文件下载
chrome.downloads.download({url: 'https://ya.ru'});