golang连接FTP服务器并下载.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
golang连接FTP服务器并下载 最近因为要⽤最⼀个简易⽹盘,主要功能是对接企业已有的ftp服务器和smb服务器。这篇博客主要是讲golang对接ftp服务器 go get /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 )   源码中只定义了这个接⼝,但是没有实现,因为这个对于每个⽂件的处理都是不⼀样的,需要你⾃⼰去定义⾃⼰需要的这个⽂件操作, 因此只要去实现这个⽅法,在调⽤下载接⼝的时候传⼊你的⽅法就⾏了。 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 }

文档评论(0)

文库垃圾佬 + 关注
实名认证
文档贡献者

这个人很懒

1亿VIP精品文档

相关文档