|
|
|
|
package tools
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"log"
|
|
|
|
|
"path/filepath"
|
|
|
|
|
|
|
|
|
|
filedriver "github.com/goftp/file-driver"
|
|
|
|
|
"github.com/goftp/server"
|
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var ports int
|
|
|
|
|
var username, pwd string
|
|
|
|
|
|
|
|
|
|
// ftpCmd represents the ftp command
|
|
|
|
|
var ftpcmd = &cobra.Command{
|
|
|
|
|
Use: "ftp",
|
|
|
|
|
Short: `FTP文件服务器`,
|
|
|
|
|
Long: `FTP文件服务器`,
|
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
|
path, _ = filepath.Abs(path)
|
|
|
|
|
factory := &filedriver.FileDriverFactory{
|
|
|
|
|
RootPath: path,
|
|
|
|
|
Perm: server.NewSimplePerm("user", "group"),
|
|
|
|
|
}
|
|
|
|
|
opts := &server.ServerOpts{
|
|
|
|
|
Factory: factory,
|
|
|
|
|
Port: ports,
|
|
|
|
|
Hostname: ip,
|
|
|
|
|
Auth: &server.SimpleAuth{Name: username, Password: pwd},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.Printf("Starting ftp server on %v:%v", opts.Hostname, opts.Port)
|
|
|
|
|
log.Printf("Username %v, Password %v", username, pwd)
|
|
|
|
|
server := server.NewServer(opts)
|
|
|
|
|
err := server.ListenAndServe()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal("Error starting server:", err)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
Maincmd.AddCommand(ftpcmd)
|
|
|
|
|
ftpcmd.Flags().IntVarP(&ports, "port", "p", 21, "监听端口")
|
|
|
|
|
ftpcmd.Flags().StringVarP(&ip, "ip", "i", "0.0.0.0", "监听地址")
|
|
|
|
|
ftpcmd.Flags().StringVarP(&username, "user", "u", "1", "用户名,默认为1")
|
|
|
|
|
ftpcmd.Flags().StringVarP(&pwd, "pwd", "k", "1", "密码,默认为1")
|
|
|
|
|
ftpcmd.Flags().StringVarP(&path, "folder", "f", "./", "本地文件地址")
|
|
|
|
|
}
|