/
ftpHelpProcess.go
150 lines (140 loc) · 3.51 KB
/
ftpHelpProcess.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// FTP工具类
// create by gloomy 2017-4-1 17:32:06
package gutil
import (
"bytes"
"fmt"
"github.com/jlaffaye/ftp"
"strings"
"time"
)
// FTP帮助类实体
// create by gloomy 2017-4-1 17:34:16
type FtpHelpStruct struct {
IpAddr string // ip 地址
Port int // 端口
TimeOut time.Duration // 超时时间
UserName string // 用户名
PassWord string // 密码
FilePaths string // 目标服务器路径
}
const ftpTimeOut = 60 * time.Minute
// FTP文件传输
// create by gloomy 2017-4-1 17:36:11
// FTP配置实体 文件内容 创建目标服务器的文件名
// 错误对象
func FtpFileStor(model *FtpHelpStruct, ftpConntion *ftp.ServerConn, contentByte *[]byte, createFilePath string) error {
var (
err error
)
if ftpConntion == nil || ftpConntion.NoOp() != nil {
ftpConntion, err = ftpLogin(model)
if err != nil {
return err
}
}
return ftpConntion.Stor(createFilePath, bytes.NewReader(*contentByte))
}
// FTP登录
// create by gloomy 2017-4-1 17:39:59
// 输入参数 FTP配置实体
// 输出参数 FTP连接对象 错误对象
func ftpLogin(model *FtpHelpStruct) (*ftp.ServerConn, error) {
if model.TimeOut <= 0 {
model.TimeOut = ftpTimeOut
}
c, err := ftp.DialTimeout(fmt.Sprintf("%s:%d", model.IpAddr, model.Port), model.TimeOut)
if err != nil {
return nil, err
}
err = c.Login(model.UserName, model.PassWord)
if err != nil {
return nil, err
}
err = c.NoOp()
if err != nil {
return nil, err
}
return c, err
}
// FTP文件删除
// create by gloomy 2017-04-02 01:08:15
// 文件名 ftp配置对象
// 错误对象
func FtpRemoveFile(filePathStr string, ftpConntion *ftp.ServerConn, model *FtpHelpStruct) error {
var (
err error
)
if ftpConntion == nil || ftpConntion.NoOp() != nil {
ftpConntion, err = ftpLogin(model)
if err != nil {
return err
}
}
return ftpConntion.Delete(filePathStr)
}
// ftp修正远程服务器文件名称
// create by gloomy 2017-04-04 21:26:48
// 源文件 修正后的文件名称 ftp配置对象
// 错误对象
func FtpRenameFile(from, to string, ftpConntion *ftp.ServerConn, model *FtpHelpStruct) error {
var (
err error
)
if ftpConntion == nil || ftpConntion.NoOp() != nil {
ftpConntion, err = ftpLogin(model)
if err != nil {
return err
}
}
return ftpConntion.Rename(from, to)
}
// 获取FTP上所有的文件列表
// create by gloomy 2017-04-12 10:43:25
// 目录地址
// 文件列表集 错误对象
func FtpNameList(pathStr string, ftpConntion *ftp.ServerConn, model *FtpHelpStruct) ([]string, error) {
var (
nameList []string
)
err := ftpList(pathStr, ftpConntion, model, &nameList)
return nameList, err
}
func ftpList(pathStr string, ftpConntion *ftp.ServerConn, model *FtpHelpStruct, nameListIn *[]string) error {
var (
err error
pathDir string
)
if ftpConntion == nil || ftpConntion.NoOp() != nil {
ftpConntion, err = ftpLogin(model)
if err != nil {
return err
}
}
entryArray, err := ftpConntion.List(pathStr)
if err != nil {
return err
}
if strings.TrimSpace(pathStr) != "" && !strings.HasSuffix(pathStr, "/") {
pathStr += "/"
}
for _, item := range entryArray {
pathDir = fmt.Sprintf("%s%s", pathStr, item.Name)
if item.Type == 0 {
*nameListIn = append(*nameListIn, pathDir)
} else {
err = ftpList(pathDir, ftpConntion, model, nameListIn)
if err != nil {
return err
}
}
}
return nil
}
// ftp退出
// create by gloomy 2017-4-14 11:25:04
func FtpExit(ftpConntion *ftp.ServerConn) {
if ftpConntion != nil {
ftpConntion.Quit()
}
}