Ошибка 502 «Команда не поддерживается» при загрузке файла с использованием FTP NodeJS - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать FTP-сервер, используя библиотеку ftp-srv, а затем загрузить на него файл, используя клиентскую библиотеку FTP jsftp.

Все функции (Rename, ls, et c .. ) работают, за исключением функции загрузки, которая завершается с ошибкой из-за ошибки 502.

Код FTP-сервера:

const ftpServer = require('ftp-srv'); 

const startFtpServer = async (host, port, user, pass) => {  


  const server = new ftpServer(`ftp://${host}:${port}`, { 
    pasv_range: '8400-8500', // change this to an open port range for your app 
    greeting:"Hello to my custom server",
  }); 

  server.on('login', ({ connection, username, password }, resolve, reject) => { 
    if (1) { 
      // If connected, add a handler to confirm file uploads 
      connection.on('STOR', (error, fileName) => { 
        if (error) { 
          console.error(`FTP server error: could not receive file ${fileName} for upload ${error}`); 
        } 
        console.info(`FTP server: upload successfully received - ${fileName}`); 
      }); 
      resolve({ root: 'C:/Users/kjaber/Desktop/serv' }); 
    } else { 
      reject(new Error('Unable to authenticate with FTP server: bad username or password')); 
    } 
  }); 

  server.on('client-error', ({ context, error }) => { 
    console.error(`FTP server error: error interfacing with client ${context} ${error} on ftp://${host}:${port} ${JSON.stringify(error)}`); 
  }); 

  const closeFtpServer = async () => { 
    await server.close(); 
  }; 

  // The types are incorrect here - listen returns a promise 

  await server.listen(); 


  return { 
    shutdownFunc: async () => { 
      // server.close() returns a promise - another incorrect type 
      await closeFtpServer(); 
    }, 
  }; 
}; 

startFtpServer("127.0.0.1","60000","anonymous","chrome@example.com");

Это открывает FTP-сервер для порта 21.

FTP-клиент:

var fs = require("fs");

var ftp = new jsftp({
host: "127.0.0.1",
port: 21, // defaults to 21
user: "a", // defaults to "anonymous"
pass: "b" // defaults to "@anonymous"
});

ftp.auth("aaaa", "bbbb", function(hadErr) {
if (!hadErr)
console.log("auth succesfull")
});


ftp.raw("quit", (err, data) => {
  if (err) {
    return console.error(err);
  }

  console.log("Bye!");
});

ftp.put('C:/Users/kjaber/Desktop/Console/bbb.txt', "/", err => {
  console.log(err)
  if (!err) {
    console.log("File transferred successfully!");
  }
});

После запуска клиента появляется ошибка «Ошибка: 502 Команда не поддерживается». Я попытался использовать FileZella в качестве FTP-клиента, и загрузка прошла успешно, но с использованием приведенного выше клиентского кода это не работает. Есть идеи почему?

...