golang上传文件到ftp服务器

devtools/2024/9/20 4:02:56/ 标签: golang, 服务器, 开发语言

之前有个业务需要把文件上传到ftp服务器,写了一个上传ftp的功能

package ftpimport "context"type Client interface {// UploadFile 上传文件UploadFile(ctx context.Context, opt *UploadFileOpt) error
}type UploadFileOpt struct {Data           []byteRemoteFileName stringDir            string
}
package ftpimport ("bytes""context""github.com/jlaffaye/ftp"
)// FtpClient 结构体包含 FTP 客户端的配置信息
type FtpClient struct {Addr       stringName       stringPwd        stringDir        stringConnection *ftp.ServerConn
}// NewFtpClient 创建一个新的 FtpClient 实例
func NewFtpClient(addr, name, pwd, dir string) Client {return &FtpClient{Addr: addr,Name: name,Pwd:  pwd,Dir:  dir,}
}// Connect 连接到 FTP 服务器
func (c *FtpClient) Connect() error {conn, err := ftp.Dial(c.Addr)if err != nil {return err}err = conn.Login(c.Name, c.Pwd)if err != nil {return err}c.Connection = connreturn nil
}// Disconnect 断开与 FTP 服务器的连接
func (c *FtpClient) Disconnect() {if c.Connection != nil {c.Connection.Quit()}
}// UploadFile 上传文件到 FTP 服务器,接受文件内容的 []byte 数组
func (c *FtpClient) UploadFile(ctx context.Context, opt *UploadFileOpt) error {if c.Addr == "" {return nil}// 连接到 FTP 服务器err := c.Connect()if err != nil {return err}defer c.Disconnect()uploadDir := c.Dirif opt.Dir != "" {uploadDir = opt.Dir}// 切换到指定目录err = c.Connection.ChangeDir(uploadDir)if err != nil {return err}// 上传文件err = c.Connection.Stor(opt.RemoteFileName, bytes.NewReader(opt.Data))if err != nil {return err}return nil
}

http://www.ppmy.cn/devtools/16700.html

相关文章

机器视觉检测为什么是工业生产的刚需?

机器视觉检测在工业生产中被视为刚需,主要是因为它具备以下几个关键优势: 提高精度与效率:机器视觉系统可以进行高速、高精度的检测。这对于保证产品质量、减少废品非常关键。例如,在生产线上,机器视觉可以迅速识别产品…

维态思(上海)环保科技有限公司 | 2024全国水科技大会暨技术装备成果展览会

嘉宾简介 胡建龙 维态思(上海)环保科技有限公司 总经理 报告题目:微生态滤床 植物工厂——小城镇生活污水生态净化及零排放案例分享 国家注册设备工程师(给排水)、上海市(合作交流)五四青年…

六、Java+FFmpeg,实战直播推流

目录 类 JavaFFmepegTest run() 方法 openFFmpegExe() 方法 main() 方法 总结 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io

深入了解Eureka:微服务架构中的服务发现与注册中心

引言 微服务架构的兴起使得应用程序变得更加模块化和可扩展。在这种架构下,服务发现与注册中心扮演着至关重要的角色。本文将深入探讨Eureka作为服务发现与注册中心的作用、优缺点、重要性以及其服务架构。 一、Eureka的作用 Eureka是Netflix开源的一款用于构建分…

【力扣】16. 最接近的三数之和

16. 最接近的三数之和 题目描述 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,2,1…

【Webgl_glslThreejs】搬运分享shader_飘落心形

来源网站 https://www.shadertoy.com/view/4sccWr效果预览 代码演示 将shadertory上的代码转成了threejs可以直接用的代码,引入文件的material,并在创建mesh或已有物体上使用material即可,使用时请注意uv对齐。 import { DoubleSide, Shad…

游戏新手村18:游戏广告渠道与广告形式

上文我们说到,渠道为王,渠道可以为我们带来流量和用户,进而带来收入。我们可以通过哪些渠道导入用户呢?每个渠道有哪些优劣呢?在进行游戏营销推广的时候我们该如何选择呢? 根据付费性质,我们可…

iOS runtime

—参考文章— 暂时没有 一、如何在Xcode中使用runtime Xcode默认是不建议开发者使用runtime的,所以在Xcode直接使用runtime的语法是会报错误的。 如果要在Xcode中使用runtime的语法,是需要配置一下才可以使用,配置方法如下图: 首…

LabVIEW多通道数据采集系统

LabVIEW多通道数据采集系统 在当今的数据采集领域,随着技术的不断进步和应用需求的日益增长,对数据采集系统的速度、稳定性和灵活性要求也越来越高。基于千兆以太网和LabVIEW的多通道数据采集系统,以其高速的数据传输能力和强大的数据处理功…

microk8s拉取pause镜像卡住

前几天嫌服务器上镜像太多占空间,全部删掉了,今天看到 microk8s 更新了 1.30 版本,果断更新,结果集群跑不起来了。 先通过 microk8s.kubectl get pods --all-namespaces 命令看看 pod 状态。 如上图可以看到,所有的业…

【kotlin】利用by关键字更加方便地实现装饰器模式

关于kotlin中的by关键字的用法,kotlin官方文档属性委托这一节讲得很清楚。 简单来说就是这样的,假设存在一个接口Component如下: interface Component {fun method1(): IntArrayfun method2(a: Int)fun method3(a: Int, str: String) }那么对…

Kotlin语法入门-密封类和密封接口(11)

Kotlin语法入门-密封类和密封接口(11) 文章目录 Kotlin语法入门-密封类和密封接口(11)十一、密封类和密封接口1、密封类2、密封接口 十一、密封类和密封接口 1、密封类 在Kotlin中,密封类(Sealed Class)是一种特殊的类,用于表示受…

Linux fdformat命令教程:如何进行软盘的低级格式化(附案例详解和注意事项)

Linux fdformat命令介绍 fdformat是一个用于对软盘进行低级格式化的命令。这个命令通常用于对软盘进行底层的格式化操作,以便于在软盘上创建新的文件系统。 Linux fdformat命令适用的Linux版本 fdformat命令在大多数Linux发行版中都可以使用,包括但不…

NXP应用随记(七):S32K3XX复位与启动阅读记录

目录 1、复位过程 1.1、概述 1.2、复位产生模块 1.2.1、上电复位 1.2.2、破坏性复位 1.2.3、功能复位 1.3、芯片复位及引导概述 1.4、重置和启动流程图 1.5、复位块序列 2、上电复位 3、破坏性复位 4、功能复位 5、设备配置格式(DCF) 6、重置专题 6.1、重置引脚行…

怎么选合适的图纸加密软件?迅软DSE加密软件功能、安全与易用性并存

利用加密软件进行图纸加密,确保企业的图纸信息能够得到有效保护,防止非法访问和数据泄露。 一、挑选图纸加密软件的注意事项? 用户反馈:参考其他用户的反馈和评价,了解软件在实际使用中的表现和潜在问题。兼容性&…

《A Discriminative Feature Learning Approach for Deep Face Recognition》阅读笔记

论文标题 《A Discriminative Feature Learning Approach for Deep Face Recognition》 一种用于深度人脸识别的判别性特征学习方法 作者 Yandong Wen、Kaipeng Zhang、Zhifeng Li 和 Yu Qiao 来自深圳市计算机视觉与专利重点实验室、中国科学院深圳先进技术研究院和香港中…

牛客NC199 字符串解码【中等 递归,栈的思想 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92 相同题目: https://www.lintcode.com/problem/575 思路 解法和基础计算器1,2,3类似,递归参考答案C struct Info {string str;int stopindex;Info(str…

linux 系统文件目录颜色及特殊权限对应的颜色

什么决定文件目录的颜色和背景? 颜色 说明 栗子 权限白色表示普通文件 蓝色表示目录 绿色表示可执行文件 浅蓝色链接文件 黄色表示设备文件 红色 表示压缩文件 红色闪烁表示链接的文件有问题 灰色 表示其它文件 可以用字符表示文件的类型&am…

芯片制造的成本与定价

芯片制造的成本与定价之间存在密切关系,芯片制造商在设定产品价格时会充分考虑制造成本,并结合市场策略、竞争态势、客户接受度等多个因素来制定最终售价。以下是关于芯片制造成本与定价之间相互作用的一些关键点: 1. 成本构成 芯片制造成本主要包括以下几个方面: 设计成本…

信息系统项目管理师0069:数据运维(5信息系统工程—5.2数据工程—5.2.3数据运维)

点击查看专栏目录 文章目录 5.2.3数据运维1.数据存储2.数据备份3.数据容灾4.数据质量评价与控制记忆要点总结5.2.3数据运维 数据开发利用的前提是通过合适的方式将数据保存到存储介质上,并能保证有效的访问,还要通过数据备份和容灾手段,保证数据的高可用性。数据质量管理是在…