Я пытаюсь создать 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-клиента, и загрузка прошла успешно, но с использованием приведенного выше клиентского кода это не работает. Есть идеи почему?