黄梓健
5 years ago
2 changed files with 205 additions and 0 deletions
-
4.gitignore
-
201main.go
@ -0,0 +1,4 @@ |
|||
.idea |
|||
*.exe |
|||
go.mod |
|||
go.sum |
@ -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() { |
|||
|
|||
} |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue