_fastPut(lPath, rPath, opts, addListeners = true) {
    let listeners;
    return new Promise((resolve, reject) => {
      if (addListeners) {
        listeners = addTempListeners(this, '_fastPut', reject);
      }
      if (haveConnection(this, '_fastPut', reject)) {
        this.sftp.fastPut(lPath, rPath, opts, (err) => {
          if (err) {
            reject(
              this.fmtError(
                `${err.message} Local: ${lPath} Remote: ${rPath}`,
                'fastPut',
                err.code,
              ),
            );
          }
          resolve(`${lPath} was successfully uploaded to ${rPath}!`);
        });
      }
    }).finally(() => {
      if (addListeners) {
        removeTempListeners(this, listeners, '_fastPut');
      }
    });
  }
Use SSH2 fastPut for uploading the file.
Uploads a file from localPath to remotePath using parallel reads
for faster throughput.

See 'fastPut' at
https://github.com/mscdex/ssh2-streams/blob/master/SFTPStream.md

WARNING: The fastPut functionality is heavily dependent on the capabilities of
the remote sftp server. Many sftp servers do not support or do not fully support this
functionality. See the Platform Quirks & Warnings section of the README for more details.

@param {String} localPath - path to local file to put
@param {String} remotePath - destination path for put file
@param {Object} options - additonal fastPut options
@param {Boolean} addListeners - (Optional) if true, add listeners. Default true.
@return {Promise<String>} the result of downloading the file