golang连接FTP服务器并下载
最近因为要⽤最⼀个简易⽹盘,主要功能是对接企业已有的ftp服务器和smb服务器。这篇博客主要是讲golang对接ftp服务器
go get github/dutchcoders/goftp
使⽤的是⼀个荷兰开发者作为主导的包,当时主要是因为有⼀个博主在CSDN上分享过这个包的使⽤⽅法,所以当时就去看了下这个包的源码。
1.连接
goftp.Connect(connConfig)
// connConfig是地址配置,ip:端⼝的⼀个字符串,如:localhost:2121
这个⽅法执⾏过之后会返回⼀个ftp连接对象和err,之后拿着这个ftp对象就可以去使⽤内置的⽅法对ftp服务器进⾏操作了
2.登录
theConn.Login(username, pwd)
// theConn是1中返回的ftp对象
这个就是登录ftp服务器,还是操作之前的ftp对象,也就是goftp.FTP这个类实例化出的对象的⽅法。
3.获取当前路径
theConn.Pwd()
4.切换路径
theConn.Cwd("路径")
切换⼯作⽬录,这个是基于当前路径⾛的。如果刚登录FTP服务器的话,你的路径打印Pwd的结果就是空字符串。这时候输⼊相对路径即可。这个参数是⽀持.(当前⽬录)和..(上级⽬录)的。如果是在根⽬录下,切换..是不会报错的,还是在当前⽬录。
5.查看当前⽬录
theConn.List("")
参数同上,执⾏完之后显⽰的是⽬录结构和各个⽂件或⽂件夹的权限,这⾥返回的是⼀个⼤字符串。我是通过正则做的匹配。\\S*\r\n 获取名称,^[d-](\\S*)\\s获取读写权限,这两个都是regexp.Compile的参数。
以上是⼀些基础⽅法,还有⼀些其他的,可以去看源码。⽐如Rename重命名,Mkd新建⽂件夹。
上传的话之前说的那个类⾥有⼀个Retr⽅法,这个⽅法需要两个参数,第⼀个是⽂件名,第⼆个是⼀个⽂件处理⽅法
type (
// WalkFunc is called on each path in a Walk. Errors are filtered through WalkFunc
WalkFunc func(path string, info os.FileMode, err error) error
// RetrFunc is passed to Retr and is the handler for the stream received for a given path
RetrFunc func(r io.Reader) error
)
connect下载
源码中只定义了这个接⼝,但是没有实现,因为这个对于每个⽂件的处理都是不⼀样的,需要你⾃⼰去定义⾃⼰需要的这个⽂件操作,因此只要去实现这个⽅法,在调⽤下载接⼝的时候传⼊你的⽅法就⾏了。
type File2 struct {
Name string
Content []byte
}
func (f *File2) GetFile(r io.Reader) error {
var buf = new(bytes.Buffer)
_, err := io.Copy(buf, r)
CheckErr(err)
var n = buf.Len()
var res = []byte{}
for {
var b []byte
switch {
case n > 1024:
b = make([]byte, 1024)
n -= 1024
default:
b = make([]byte, n)
}
fmt.Println(len(b))
size, err := buf.Read(b)
if err != nil && err != io.EOF {
fmt.Println(err)
return err
}
if size == 0 {
break
}
res = append(res, b...)
}
fmt.Println(res)
f.Content = res
return nil
}
因为能⼒有限,架上功能⽐较简单就是⼀个⼩⽂件的下载,所以这⾥就简单打个样,如果有⼈写了不错的⽂件处理,请把链接留在本⽂评论,以供⼤家参考。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论