NW JS - 从 URL 下载并保存文件

问题描述 投票:0回答:3

我最近开始使用 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 还很陌生,有什么建议吗?

jquery node.js node-webkit
3个回答
3
投票

如果下载进度对您很重要,请使用此:

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');
        });
    });
});

2
投票

没关系,我刚刚意识到我什至不需要使用 jQuery,我只是像这样使用 NodeJS:

$('#btnUpdateClient')
            .click(function () {

                var file = fs.createWriteStream('./files/staClient.zip');

                var request = http.get(addresses.CLIENT_URL, function (response) {
                    response.pipe(file);
                });
            });

0
投票

所有这些方法都需要您编写自己的

Save as
对话框窗口。我建议调用 Chrome Extension API 进行文件下载

chrome.downloads.download({url: 'https://ya.ru'});

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