【问题标题】:Error 502 "Command Not Supported" when uploading a file using FTP NodeJS使用 FTP NodeJS 上传文件时出现错误 502“不支持命令”
【发布时间】:2023-03-20 02:23:01
【问题描述】:

我正在尝试使用 ftp-srv 库创建 FTP 服务器,然后使用 FTP 客户端库 jsftp 将文件上传到它。

所有功能(重命名,ls 等)都在工作,除了上传功能失败,错误 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 客户端并且上传成功,但是使用上面的客户端代码它不起作用。 知道为什么吗?

【问题讨论】:

    标签: node.js ftp ftp-client


    【解决方案1】:

    我有同样的问题。您需要将命令列入白名单,例如

    const ftpServer = new FtpSrv({ url,
        pasv_url: myHostname,
        whitelist: ['STOR', 'USER', 'PASS', 'TYPE', 'RETR', 'PASV', 'QUIT'],
        anonymous: false,
        greeting : [ "Hello, I'm FTP server" ] } );
    

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多