最近因为要用最一个简易网盘,主要功能是对接企业已有的ftp服务器和smb服务器。这篇博客主要是讲golang对接ftp服务器

go get github.com/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新建文件夹。

下面说一下这个的上传和下载(上传源码处是有实例的,可以直接去github里面看,或者参考博客https://blog.csdn.net/xiangxianghehe/article/details/78310249)

上传的话之前说的那个类里有一个Retr方法,这个方法需要两个参数,第一个是文件名,第二个是一个文件处理方法

type (
// WalkFunc is called on each path in a Walk. Errors are filtered through WalkFuncWalkFunc 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 pathRetrFunc func(r io.Reader) error
)

  源码中只定义了这个接口,但是没有实现,因为这个对于每个文件的处理都是不一样的,需要你自己去定义自己需要的这个文件操作,因此只要去实现这个方法,在调用下载接口的时候传入你的方法就行了。

type File2 struct {Name    stringContent []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 []byteswitch {case n > 1024:b = make([]byte, 1024)n -= 1024default: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 = resreturn nil
}

  因为能力有限,架上功能比较简单就是一个小文件的下载,所以这里就简单打个样,如果有人写了不错的文件处理,请把链接留在本文评论,以供大家参考。

golang连接FTP服务器并下载相关推荐

  1. Python 连接FTP服务器并实现文件夹下载实例演示,python区分ftp目录下文件和文件夹方法,ftp目录下包含中文名问题处理

    Python 连接 FTP 服务器并实现文件夹下载实例演示 第一章:连接 FTP 服务器并实现文件夹下载 ① 连接 FTP 服务器 ② 进入指定目录并显示文件信息 ③ 区分文件和文件夹名 ④ 文件夹名 ...

  2. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  3. linux下常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address] a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密 ...

  4. linux下常用FTP命令 1 连接ftp服务器

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 1. 连 ...

  5. 常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address] a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密 ...

  6. 《工具箱-服务器相关》Moba连接FTP服务器,EElFTPSUnacceptedReplyError(error code is 550)已解决

    Moba连接FTP服务器,EElFTPSUnacceptedReplyError(error code is 550)已解决 使用FTP服务器连接FTP服务器,在使用过程中发现创建文件和上传文件时会报 ...

  7. Python 连接 ftp 服务器操作

    Python 连接 ftp 服务器操作 1. 连接 ftp 服务器 2. 基本命令 1. 连接 ftp 服务器 代码如下 # !/usr/bin/python # -*- coding: utf-8 ...

  8. springboot连接ftp服务器

    1.引入pom文件 <!-- ftp --><dependency><groupId>commons-net</groupId><artifact ...

  9. ftp服务器时长如何修改,连接ftp服务器的时长怎么设置

    连接ftp服务器的时长怎么设置 内容精选 换一换 FTP/SFTP连接适用于从线下文件服务器或ECS服务器上迁移文件到OBS或数据库.当前仅支持Linux操作系统的FTP 服务器.连接FTP或SFTP ...

  10. php连接服务器,php入门教程六(php实现连接ftp服务器与IMAP服务器)

    根据上面的实例我们总结了,本文章主要是讲到imap服务器连接以及与ftp服务器进行连接详细教程,包括删除,上传,下载文件实例 用php教程实现连接服务器,还有实现连接imap服务器,最后通过php编写 ...

最新文章

  1. 越南一难倒博士的趣味数学题
  2. NodeJS基础2---2 Promise详解
  3. UI设计入门书籍(未整理)
  4. 免费版最好用功能强大方便快捷的计算器Calculator#出炉~
  5. 用jsphtml:file实现一个文件上传的例子,而且有验证
  6. 当DRM出错时的解决办法
  7. 指针运算不同于算数运算,不能简单加减
  8. C#+ArcEngine中com对象的释放问题
  9. XQuery的contains函数
  10. Jquery—对$()的总结
  11. 经典排序算法(十八)--Proxmap Sort
  12. unity天气系统_天气系统(一)
  13. 【CVPR2020】计算机视觉与模式识别会议论文完全清单_Part2
  14. 《Labeled Data Generation with Inexact Supervision》 KDD-2021 论文阅读
  15. echarts社区饼图 echart饼图 玫瑰图
  16. 阿里云盘 WebDAV升级
  17. 计算机网络启动不了怎么办,网络适配器无法启动如何修复_网络适配器不能启动的处理办法-系统城...
  18. UltraVNC源码编译运行
  19. 使用certbot工具制作免费https证书
  20. casella pdf 统计推断_统计推断_PDF图书下载_George Casella,Roger L. Berger_免费PDF电子书下载_第一图书网...

热门文章

  1. 计算机怎样更新卡驱动,电脑显卡驱动怎么更新(NVIDIA显卡手动更新教程)
  2. 【Oracle】批量造测试数据
  3. matlab黄金分割实例,实战案例教你黄金分割
  4. 软硬链接、引号符号、逻辑符号、系统通配符
  5. java treemap指定排序_TreeMap按照key排序
  6. Code Server 是什么?
  7. CDOJ 796 DAGE(Big Brother)
  8. 计算机系调剂到化工专业难不难,华东理工大学大一我被调剂到无机非金属我想转专业..._造价工程师_帮考网...
  9. 启科量子开源量子编程框架 QuTrunk
  10. 再见面试官:单例模式有几种写法?