Reputation: 1628
I am using node -v v14.17.0
and "ssh2-sftp-client": "^7.0.0"
and method fastPut
https://github.com/theophilusx/ssh2-sftp-client#sec-5-2-9
Checking the remote files is okay, so connection works.
My environment is wsl2 Ubuntu-20.04
Problem I face is error
RuntimeError: abort(Error: fastPut: No response from server Local: /home/draganddrop/testi.txt Remote: Downloads/testi.txt). Build with -s ASSERTIONS=1 for more info.
at process.J (/home/draganddrop/node_modules/ssh2/lib/protocol/crypto/poly1305.js:20:53)
at process.emit (events.js:376:20)
at processPromiseRejections (internal/process/promises.js:245:33)
at processTicksAndRejections (internal/process/task_queues.js:96:32)
I have tried also with sftp> put /home/draganddrop/testi.txt Downloads/testi.txt
from console, which works.
Code I am using:
let Client = require('ssh2-sftp-client');
let sftp = new Client();
let remotePath = 'Downloads/testi.txt';
let localPath = '/home/draganddrop/testi.txt'
const config = {
host: 'XX.XX.XXX.XXX',
port: '22',
username: 'XXXXX',
password: 'XXXXXX'
};
sftp.connect(config)
.then(() => {
sftp.fastPut(localPath, remotePath);
//return sftp.exists(remotePath);
})
//.then(data => {
// console.log(data); // will be false or d, -, l (dir, file or link)
//})
.then(() => {
sftp.end();
})
.catch(err => {
console.error(err.message);
});
I have no idea what causes this error, I've tried with different paths and get either bad path error or this. What could be the cause?
Upvotes: 5
Views: 11419
Reputation: 2126
You can also use async/await
:
I use it for looping on a repository, I don't want to return an array of results but wait for each files.
sftp.connect(config)
// async and wait before continue
.then(async () => {
await sftp.fastPut(localPath, remotePath, options)
/* do something, don't care of the result value (blah blah was copied ...) */
})
// No data or useless then if nothing to do
.then(() => {/* do something*/})
// Close the connection
.finally(() => sftp.end());
Upvotes: 0
Reputation: 732
The reason for the problem is that the connection is closing before the finish of executing fastPut
.
You are running connect, after that in the first .then
, the method fastPut
runs asynchronously, it doesn't wait for the finish execution and return undefined to the next method .then
of the chain.
To solve the problem you just need to return a promise received from fastPut
sftp.connect(config)
.then(() => {
// vvv
return sftp.fastPut(localPath, remotePath)
})
.then((data) => {/* do something*/})
.finally(() => sftp.end())
Upvotes: 7