信息发布→ 登录 注册 退出

如何在 Golang 中实现 FTP 文件上传下载_Golang FTP Client 操作实例

发布时间:2025-11-15

点击量:
使用github.com/jlaffaye/ftp库可实现Go语言中FTP文件上传下载。1. 通过ftp.Dial连接服务器并Login登录;2. 调用Stor方法上传本地文件;3. 使用Retr和io.Copy下载远程文件;4. List列出目录内容;5. MakeDir创建目录,ChangeDir切换路径。完整示例包含上传、下载流程,适用于测试环境,生产环境需添加错误处理、重试机制,敏感数据建议采用SFTP或FTPS加密传输。

如何在 golang 中实现 ftp 文件上传下载_golang ftp client 操作实例

在 Golang 中实现 FTP 文件的上传和下载,虽然标准库没有内置 FTP 支持,但可以通过第三方库 github.com/jlaffaye/ftp 来轻松操作 FTP 服务。本文提供一个实用的 Golang FTP Client 示例,涵盖连接、文件上传、下载、目录操作等常见需求。

安装 FTP 第三方库

使用以下命令安装流行的 Go FTP 客户端库:

go get github.com/jlaffaye/ftp

Reachout.ai Reachout.ai

一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造

Reachout.ai 142 查看详情 Reachout.ai

连接到 FTP 服务器

连接前需确保已获取 FTP 服务器地址、端口、用户名和密码。以下代码展示如何建立连接并登录:

package main

import (
    "fmt"
    "log"
    "github.com/jlaffaye/ftp"
)

func main() {
    // 连接到 FTP 服务器
    conn, err := ftp.Dial("ftp.example.com:21")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Quit()

    // 登录
    err = conn.Login("username", "password")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("成功连接并登录 FTP 服务器")
}

上传文件到 FTP 服务器

使用 Stor 方法将本地文件上传到远程路径:

// 打开本地文件
file, err := os.Open("localfile.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

// 上传文件
err = conn.Stor("remotefile.txt", file)
if err != nil {
    log.Fatal(err)
}

fmt.Println("文件上传成功")

从 FTP 下载文件

使用 Retrieve 方法将远程文件下载到本地:

// 下载远程文件
resp, err := conn.Retr("remotefile.txt")
if err != nil {
    log.Fatal(err)
}
defer resp.Close()

// 创建本地文件
outFile, err := os.Create("downloaded_file.txt")
if err != nil {
    log.Fatal(err)
}
defer outFile.Close()

// 写入本地
_, err = io.Copy(outFile, resp)
if err != nil {
    log.Fatal(err)
}

fmt.Println("文件下载成功")

列出目录内容

使用 List 方法查看远程目录中的文件和子目录:

entries, err := conn.List("/")
if err != nil {
    log.Fatal(err)
}

for _, entry := range entries {
    fmt.Printf("%s %d %s\n", entry.Name, entry.Size, entry.Time)
}

创建目录与切换路径

常用操作包括创建目录和更改当前工作目录:

  • 创建目录: conn.MakeDir("/newdir")
  • 切换目录: conn.ChangeDir("/newdir")
  • 返回上级目录: conn.ChangeDirToParent()

完整示例:上传并下载文件

整合上述功能的一个小例子:

package main

import (
    "io"
    "log"
    "os"

    "github.com/jlaffaye/ftp"
)

func main() {
    conn, err := ftp.Dial("ftp.example.com:21")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Quit()

    err = conn.Login("your-username", "your-password")
    if err != nil {
        log.Fatal(err)
    }

    // 上传文件
    file, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    err = conn.Stor("test.txt", file)
    if err != nil {
        log.Fatal(err)
    }

    // 下载文件
    resp, err := conn.Retr("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Close()

    outFile, err := os.Create("downloaded_test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer outFile.Close()

    _, err = io.Copy(outFile, resp)
    if err != nil {
        log.Fatal(err)
    }

    log.Println("上传和下载完成")
}

基本上就这些。通过 jlaffaye/ftp 库,Golang 可以方便地实现 FTP 客户端功能。注意处理连接超时、网络异常等场景,在生产环境中建议封装重试机制和日志记录。FTP 协议本身不加密,敏感数据建议使用 SFTP 或 FTPS。不过对于内部系统或测试环境,这种方式简单有效。

以上就是如何在 Golang 中实现 FTP 文件上传下载_Golang FTP Client 操作实例的详细内容,更多请关注其它相关文章!


相关文章: 深入理解J*a链表中的IPosition接口与使用  微信商城在哪里打开【步骤】  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  C++ map遍历方法大全_C++ map迭代器使用总结  圆通快递查询实时追踪 圆通物流包裹状态快速查看  浏览器打开即用 美图秀秀网页版入口  AO3同人作品网入口 AO3搜索引擎官网永久地址  msn官网入口地址手机版 msn官方网站手机最新链接  J*aScript中在Map循环中检测并处理空数组元素  顺丰国际快递查询 国际件官方查询入口  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  126邮箱账号注册 电脑版登录入口  新手怎么开始学化妆 零基础化妆入门教程  微信聊天记录怎么加密_微信聊天记录加密方法  响应式图片在网页设计中的正确实现方法  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  Golang如何使用net/url解析URL_Golang URL解析与处理方法  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  快手官方唯一登录入口 谨防山寨钓鱼网站  qq游戏网页版直接玩_qq游戏免下载快速入口  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  网易大神账号申诉需要多久_网易大神账号申诉流程说明  汽水音乐在线版入口_汽水音乐网页播放手册  AO3中文官网链接_AO3网页版稳定镜像站  解决Python logging 中 datefmt 导致时间戳固定不变的问题  将PCM16音频数据转换为W*并编码为Base64教程  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  解决PHP集成HTML后CSS和图片路径加载问题的指南  PHP URL参数传递与500错误调试指南  处理动态列数据:J*a ArrayList的正确初始化与字符累加教程  Go语言:非阻塞式判断标准输入(os.Stdin)是否有数据  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  Pyrogram与g4f集成:异步编程实践与常见错误解决  sublime怎么设置启动时打开的窗口_sublime会话管理与热退出  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  HTML空白字符处理机制:渲染、DOM与编码实践  知音漫客官网漫画下载_知音漫客网页版阅读记录  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  解决Bootstrap卡片顶部边距导致背景图下移的问题  《GTA6》开发画面疑似泄露!这次可不是AI了  构建轻量级网站内部消息系统:Formspree 集成指南  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  HTML长属性值处理:表单action路径优化与代码规范应对  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  智慧团建扫码登录入口 智慧团建扫码登录入口官网版​  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!