feat: initial FTP Server for Windows with web admin panel
This commit is contained in:
+62
@@ -0,0 +1,62 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"ftp-server/config"
|
||||
ftpserver "ftp-server/ftp"
|
||||
webserver "ftp-server/web"
|
||||
)
|
||||
|
||||
func main() {
|
||||
configPath := flag.String("config", "config.json", "配置文件路径")
|
||||
flag.Parse()
|
||||
|
||||
// Load configuration
|
||||
cfg, err := config.Load(*configPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to load config: %v", err)
|
||||
}
|
||||
|
||||
fmt.Println("======================================")
|
||||
fmt.Println(" FTP Server for Windows")
|
||||
fmt.Println("======================================")
|
||||
fmt.Printf("FTP Port: %d\n", cfg.FTP.Port)
|
||||
fmt.Printf("Web Admin: http://127.0.0.1:%d\n", cfg.Web.Port)
|
||||
fmt.Printf("Admin User: %s\n", cfg.Admin.Username)
|
||||
fmt.Printf("Root Dir: %s\n", cfg.FTP.RootDir)
|
||||
fmt.Println("======================================")
|
||||
|
||||
// Ensure root directory exists
|
||||
if err := os.MkdirAll(cfg.FTP.RootDir, 0755); err != nil {
|
||||
log.Fatalf("Failed to create root directory: %v", err)
|
||||
}
|
||||
|
||||
// Start FTP server
|
||||
ftpSrv := ftpserver.NewServer(cfg, *configPath)
|
||||
if err := ftpSrv.Start(); err != nil {
|
||||
log.Fatalf("Failed to start FTP server: %v", err)
|
||||
}
|
||||
|
||||
// Start Web admin server
|
||||
webSrv := webserver.NewServer(cfg, *configPath)
|
||||
go func() {
|
||||
if err := webSrv.Start(); err != nil {
|
||||
log.Fatalf("Failed to start web server: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Wait for termination signal
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
sig := <-sigChan
|
||||
|
||||
fmt.Printf("\nReceived signal %v, shutting down...\n", sig)
|
||||
ftpSrv.Stop()
|
||||
fmt.Println("FTP Server stopped.")
|
||||
}
|
||||
Reference in New Issue
Block a user