前言
业务开发中,有时会遇到依赖方用ftp的方式提供文件下载,而ftp的链接格式如下:
ftp://{用户名}:{密码}@{站点域名}:{端口}/{路径}/{文件名}
由于不是http协议,不能用go自带的http.client下载
因此本文介绍如何下载,读取ftp文件
下载
使用第三方库:github.com/jlaffaye/ftp
func DownloadFtpFile(host string, username, password string, path, fileName string) error {
// 建立连接,默认用21端口
c, err := ftp.Dial(host+":21", ftp.DialWithTimeout(5*time.Second))
if err != nil {
return err
}
defer c.Quit()
// 登录
err = c.Login(username, password)
if err != nil {
return err
}
// 切换到path
err = c.ChangeDir(path)
if err != nil {
return err
}
// 读取文件
body, err := c.Retr(fileName)
if err != nil {
return err
}
defer body.Close()
// 创建本地文件
localFile, err := os.Create(fileName)
if err != nil {
return err
}
defer localFile.Close()
// 下载到本地
_, err = io.Copy(localFile, body)
return nil
}