Browse Source

fix:bug

master
黄梓健 5 years ago
parent
commit
9eed8dde9b
  1. 4
      .gitignore
  2. 201
      main.go

4
.gitignore

@ -0,0 +1,4 @@
.idea
*.exe
go.mod
go.sum

201
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() {
}
Loading…
Cancel
Save