【发布时间】: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