html 远程linux压缩文件夹并发送到win

 

利用的ssh2以及ssh2-sftp-client 两个库完成,因为没有两个库的函数都是并行的,要添加async限制成同步

//下载数据

function send_zip(linux_file_path, zip_name, resolve, reject) {
    console.log("****************send_zip**************8");

    var Client_11 = require('ssh2-sftp-client');

    var sftp = new Client_11();
    var linux_send_path = linux_file_path + '/data.zip';
    sftp.connect(key).then(() => {

        // 下载文件

        console.log("linux_send_path: " + linux_send_path);
        console.log("开始发送");
        var win_path = win_path_root + "/" + zip_name + ".zip";
        console.log("win_path: " + win_path);

        return sftp.fastGet(linux_send_path, win_path);
    }).then(() => {

        return sftp.delete(linux_send_path);

    }).then((data) => {

        console.log("down下载完成");
        console.log('send completed successfully.');
        resolve();
        sftp.end();

    }).catch((err) => {
        console.log(err, 'catch error');
    })
}

function make_zip(linux_file_path, zip_target, resolve, reject) {

    console.log("****************make_zip**************8");

    var Client_11 = require('ssh2').Client;

    var conn_6 = new Client_11();
    conn_6.on('ready', async function () {
        console.log("开始压缩");
        var exe_send = program_path + 'sh/make_zip.sh ' + linux_file_path + " " + zip_target;
        conn_6.exec(exe_send, function (err, stream) {
            if (err) throw err;

            stream.on('close', function (code, signal) {
                console.log("压缩完成跳出");
                conn_6.end();
                if (code === 0) {
                    console.log('zip completed successfully.');
                    // Success! Resolve.
                    resolve();
                } else {
                    // Something went wrong, reject promise!
                    reject();
                }
            }).on('data', function (data) {
                console.log('STDOUT: ' + data);
            }).stderr.on('data', function (data) {
                console.log('STDERR: ' + data);
            });
        })

    }).connect(key);
}


//exec需要监听是否跳出 async库应该可以写的更简介?
function make_zip_awaitFunction(linux_file_path, zip_target) {
    return new Promise((resolve, reject) => {
        make_zip(linux_file_path, zip_target, resolve, reject);
    });
}

function send_zip_awaitFunction(linux_file_path, zip_name) {
    return new Promise((resolve, reject) => {
        send_zip(linux_file_path, zip_name, resolve, reject);
    });
}



//linux压缩路径,传到win下文件名字,linux压缩文件夹
async function download_data(linux_file_path, zip_name, zip_target) {

    await make_zip_awaitFunction(linux_file_path, zip_target)
    await send_zip_awaitFunction(linux_file_path, zip_name)

}

 

posted @ 2022-04-08 10:22  开锁球  阅读(89)  评论(0)    收藏  举报