Files
2026-07-13 12:46:20 +08:00

68 lines
1.6 KiB
JavaScript

const { FtpSrv } = require('@electerm/ftp-srv')
const path = require('path')
const fs = require('fs')
// Create FTP root directory if it doesn't exist
const ftpRoot = path.join(__dirname, 'ftp-root')
if (!fs.existsSync(ftpRoot)) {
fs.mkdirSync(ftpRoot)
}
const ftpServer = new FtpSrv({
url: 'ftp://0.0.0.0:21',
anonymous: false,
root: ftpRoot
})
// Handle user login
ftpServer.on('login', ({ username, password }, resolve, reject) => {
// Simple authentication
console.log('login', username, password)
if (username === 'test' && password === 'test123') {
return resolve({ root: ftpRoot })
}
return reject(new Error('Invalid username or password'))
})
// Log events
ftpServer.on('client-error', ({ connection, context, error }) => {
console.log('Client error', error)
})
ftpServer.on('STOR', (error, fileName) => {
if (error) {
console.log('Error uploading file:', error)
} else {
console.log('File uploaded:', fileName)
}
})
ftpServer.on('RETR', (error, fileName) => {
if (error) {
console.log('Error downloading file:', error)
} else {
console.log('File downloaded:', fileName)
}
})
// Start server
ftpServer.listen()
.then(() => {
console.log('FTP server is running at port 21')
console.log('Username: test')
console.log('Password: test123')
console.log('FTP root directory:', ftpRoot)
})
.catch(err => {
console.log('Error starting FTP server:', err)
})
// Handle shutdown
process.on('SIGTERM', () => {
ftpServer.close()
.then(() => {
console.log('FTP server closed')
process.exit(0)
})
})