From 9eed8dde9b18e9a910a073706a36f5009f32ed87 Mon Sep 17 00:00:00 2001 From: tommy <3405129587@qq.com> Date: Wed, 8 Jul 2020 10:02:45 +0700 Subject: [PATCH] fix:bug --- .gitignore | 4 ++ main.go | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 .gitignore create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ce34eb1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +*.exe +go.mod +go.sum \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..9405090 --- /dev/null +++ b/main.go @@ -0,0 +1,201 @@ +package main + +import ( + "bytes" + "errors" + "github.com/dutchcoders/goftp" + "io" + "os" + "path/filepath" + "strings" +) + +func FtpDemo() { + var err error + var ftp *goftp.FTP + + // For debug messages: goftp.ConnectDbg("ftp.server.com:21") + if ftp, err = goftp.Connect("123.207.246.51:21"); err != nil { + panic(err) + } + + defer ftp.Close() + + // Username / password authentication + if err = ftp.Login("go-build", "7Jp7PJkcnTHbcNtZ"); err != nil { + panic(err) + } + + file := strings.NewReader("hello worldxxxxx") + if err := ftp.Stor("test.txt", file); err != nil { + panic(err) + } +} + +// 工具--> +//支持命令行, +//json配置 +//yaml配置 +//跨平台编译 +//ftp上传 + +// 不存在0 目录1 文件2 +func PathStat(path string) (int, error) { + info, err := os.Stat(path) + if os.IsNotExist(err) { // 如果不存在 + return 0, nil + } else if err != nil { + return -1, err + } else if info.IsDir() { + return 1, nil + } else { + return 2, nil + } +} + +func PathExist(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } else if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +type Ftp struct { + ftp *goftp.FTP + Addr string `json:"addr"` // 地址 + Port string `json:"port"` //端口 + Username string `json:"username"` // 用户 + Password string `json:"password"` // 密码 +} + +func Connect(addr string, port string, username string, password string) (*Ftp, error) { + var f *goftp.FTP + var err error + f, err = goftp.Connect(addr + ":" + port) + if err != nil { + return nil, err + } + + // 登录 + err = f.Login(username, password) + if err != nil { + return nil, err + } + return &Ftp{ + ftp: f, + Addr: addr, + Port: port, + Username: username, + Password: password, + }, nil +} + +func (f *Ftp) Size(path string) (int, error) { + return f.ftp.Size(path) +} + +func (f *Ftp) Stat(path string) ([]string, error) { + return f.ftp.Stat(path) +} + +// 路径和名字 +func (f *Ftp) Send(path string, reader io.Reader) error { + return f.ftp.Stor(path, reader) +} + +func (f *Ftp) SendFile(path, name string) error { + var file *os.File + var err error + file, err = os.Open(name) + if err != nil { + return err + } + return f.Send(path, file) +} + +// 发送字符串 +func (f *Ftp) SendString(path, data string) error { + return f.Send(path, strings.NewReader(data)) +} + +// 发送字节 +func (f *Ftp) SendBytes(path string, data []byte) error { + return f.Send(path, bytes.NewReader(data)) +} + +// 接收文件 +func (f *Ftp) Receive(path string, fn func(io.Reader) error) (string, error) { + return f.ftp.Retr(path, fn) +} + +// 发送到某个文件 +func (f *Ftp) ReceiveToFile(path, file string) error { + var err error + // 完善file + if file == "" { + file = path + } else if !strings.HasSuffix(file, filepath.Base(file)) { + file = filepath.Join(file, filepath.Base(path)) + } + stat, err := PathStat(filepath.Dir(file)) + if err != nil { + return err + } + if stat == 0 { + err = os.MkdirAll(filepath.Dir(file), 0666) + if err != nil { + return err + } + } else if stat == 2 { + return errors.New("目录路径为文件") + } + + _, err = f.Receive(path, func(reader io.Reader) error { + var f1 *os.File + _, err = os.Stat(file) + if os.IsNotExist(err) { + f1, err = os.Create(file) + if err != nil { + return err + } + } else if err != nil { + return err + } else { + f1, err = os.Open(file) + if err != nil { + return err + } + } + _, err = io.Copy(f1, reader) + return nil + }) + + return err +} + +// 打印出来 +func (f *Ftp) ReceiveToPrint(path string) (string, error) { + return f.Receive(path, func(reader io.Reader) error { + var err error + _, err = io.Copy(os.Stdout, reader) + return err + }) +} + +// 关闭 +func (f *Ftp) Close() error { + return f.ftp.Quit() +} + +// 上传 +func (f *Ftp) Upload(localPath string) error { + return f.ftp.Upload(localPath) +} + +func main() { + +} +