spmjs / node-scp2

[MAINTAINER WANTED] A pure javascript scp program based on ssh2.
384 stars 96 forks source link

transfer event and upload progress #100

Open haroot opened 6 years ago

haroot commented 6 years ago

transfer (buffer, uploaded, total) on successful transfer i get ouput like

At scp_put transfer <Buffer XX XX XX XX XX XX XX ... > 0 1 why is uploaded giving me a 0 and I assume 1 is for total number of files?

I was expecting uploaded to give me values that are a fraction of the total aka so I can use it for a progress bar...

aka uploaded = 999kb total = 1000kb so 999/1000 = % progress...

any way I can implement an upload progress bar using the low lever or high level API ? also how do I listen to events using the high level api?

haroot commented 6 years ago

so uploaded = lastCursor (as i assumed its a marker on upload progress) total = length ( length = parseInt((content.length - 1) / chunkSize, 10) + 1; )

so why is my length = 1 and lastCursor = 0 ?

haroot commented 6 years ago
  if (Buffer.isBuffer(content)) {
    var contents = [];
    length = parseInt((content.length - 1) / chunkSize, 10) + 1;

    for (var i = 0 ; i < length; i++) {
      contents.push(content.slice(i * chunkSize, (i + 1) * chunkSize));
    }
    async.eachSeries(contents, function(buf, callback) {
      self.emit('transfer', buf, lastCursor, length);
      sftp.write(handle, buf, 0, buf.length, lastIndex, function(err) {
        lastIndex += buf.length;
        lastCursor += 1;
        callback(err);
      });
    }, function(err) {
      sftp.close(handle, callback);
    });
haroot commented 6 years ago

obviously if we self.emit inside sftp.write before callback(err); we get output: At scp_put transfer <Buffer XX XX XX XX XX XX XX ... > 1 1

seakeys commented 2 years ago

var client = new Client({ host: config.host, username: config.username, privateKey: config.privateKey, });

client.on('transfer', function (buffer, uploaded, total) { console.log(buffer, uploaded, total, new Date()); });

scp(config.localPath, { host: config.host, username: config.username, privateKey: config.privateKey, path: config.path }, client, err => { spinner.stop(); if (!err) { console.log(chalk.green("部署完毕")) } else { console.log("err", err) } })