golang上传文件到ftp服务器

embedded/2024/9/20 7:24:10/ 标签: 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/embedded/22445.html

相关文章

操作系统——优先权算法c++实现

变量描述 测试数据 5 A 0 4 4 B 1 3 2 C 2 5 3 D 3 2 5 E 4 4 1 先来先服务算法 简述 该算法实现非常简单就是对到达时间排个序&#xff0c;然后依次进行即可&#xff0c;对结构体的sort进行了重载 代码 void FCFS() {//先来先服务算法std::cout<<"\n\t\t\t\t\…

灌溉排涝乙级资质升级甲级,这些材料你准备好了吗?

在灌溉排涝行业&#xff0c;资质的升级不仅是企业实力的一种体现&#xff0c;更是开拓新市场、参与更多大型项目的必要条件。从乙级资质升级到甲级&#xff0c;企业需要跨越一个较高的门槛&#xff0c;准备一系列详尽而严谨的材料。以下就是你需要准备的关键材料清单&#xff0…

Cocos Creator 3D物理引擎的物理参数控制详解

前言 Cocos Creator是一款基于JavaScript和TypeScript的开源游戏引擎&#xff0c;它提供了强大的3D物理引擎&#xff0c;可以帮助开发者实现各种物理效果。在Cocos Creator中&#xff0c;我们可以通过控制物理参数来实现不同的物理效果&#xff0c;比如重力、碰撞检测、摩擦力…

后端学习记录~~JavaSE篇(Module08-异常 上 )

总览&#xff1a; Java概述&#xff1a; 思维导图文件在本人个人主页上-----资源模块 资源详情&#xff08;免费下载&#xff09;&#xff1a;Java学习思维导图异常篇资源-CSDN文库https://download.csdn.net/download/m0_61589682/89238330 整体展示&#xff1a;

动手学深度学习——矩阵

1. 基本概念 1.1 标量 标量由只有一个元素的张量表示。 所以标量计算与程度开发中的普通变量计算没有差异。 import torchx torch.tensor(3.0) y torch.tensor(2.0)x y, x * y, x / y, x**y(tensor(5.), tensor(6.), tensor(1.5000), tensor(9.))1.2 向量 向量泛化自标量…

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注&#xff0c;数据集制作不易&#xff0c;请尊重版权&#xff08;稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫&#xff09; 如果需要yolv8检测模型和数据集放在一起的压缩包&#xff0c;可以关注&#xff1a;最新最…

什么是跨域? 出现原因及解决方法

什么是跨域? 出现原因及解决方法 什么是跨域 跨域&#xff1a;浏览器对于javascript的同源策略的限制 。 同源政策的目的&#xff0c;是为了保证用户信息的安全&#xff0c;防止恶意的网站窃取数据。 设想这样一种情况&#xff1a;A 网站是一家银行&#xff0c;用户登录以后…

迭代器iterator是C++中用于遍历容器中元素的对象

C中的迭代器是一种对象&#xff0c;用于在容器中遍历元素。它提供了一种抽象的方式来访问容器中的元素&#xff0c;而不暴露底层数据结构的细节。通过迭代器&#xff0c;可以遍历顺序容器&#xff08;如vector、list、deque等&#xff09;、关联容器&#xff08;如map、set等&a…

【调研分析】目标在不同焦距和距离下与画面的比例(2.8-3.6-4.0)

之前在做项目中需要极度优化效果和代码运行速度 为此测试了同一个目标在不同焦距和距离下与画面的比例&#xff0c;从而可以方便在指定大小情况下搜索目标 NOTE: 这是早期滑窗检测做目标检测下的工作

java项目:微信小程序基于SSM框架小说阅读器小程序【源码+数据库+毕业论文+PPT】

一、项目简介 本项目是一套基于SSM框架小说阅读器小程序 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能齐全、…

python代码实现支持向量机对鸢尾花分类

1、导入支持向量机模型&#xff0c;划分数据集 from sklearn import datasets from sklearn import svmirisdatasets.load_iris() iris_xiris.data iris_yiris.target indices np.random.permutation(len(iris_x)) iris_x_train iris_x[indices[:-10]] iris_y_train iris_y…

计算机网络之传输层TCP\UDP协议

UDP协议 用户数据报协议UDP概述 UDP只在IP数据报服务之上增加了很少功能&#xff0c;即复用分用和差错检测功能 UDP的主要特点&#xff1a; UDP是无连接的&#xff0c;减少开销和发送数据之前的时延 UDP使用最大努力交付&#xff0c;即不保证可靠交付&#xff0c;可靠性由U…

linux权限的概念

目录 shell命令以及运行原理 Linux权限的概念 Linux权限管理 文件类型和访问权限&#xff08;事物属性&#xff09; 快速修改权限的做法&#xff1a; 一个文件的权限谁能修改&#xff1f; 对比权限的有无&#xff0c;表现&#xff1a; 修改权限的第二套方法&#xff1…

「布道师系列文章」小红书黄章衡:AutoMQ Serverless 基石-秒级分区迁移

作者&#xff5c;黄章衡&#xff0c;小红书消息引擎研发专家 01 引言 Apache Kafka 因存算一体化架构&#xff0c;分区迁移依赖大量数据同步的完成&#xff0c;以一个 100MB/s 流量的 Kafka 分区为例&#xff0c;运行一天产生的数据量约为 8.2T&#xff0c;如果此时需要将该分…

访问控制列表配置实验

ACL&#xff0c;全称 Access Control List&#xff08;访问控制列表&#xff09;&#xff0c;是一种实现访问控制的机制&#xff0c;用于规定哪些主体&#xff08;如用户、设备、IP地址、进程等&#xff09;可以对哪些资源&#xff08;如网络服务、文件、系统对象等&#xff09…

xml,json和protobuffer

数据组织格式 xmljsonprotobuffer小结 xml 是以成对的方式,来表示"键值对"的信息,同时标签支持嵌套,可以构成更复杂的树形结构数据. 请求: <request> // 开始标签<username>zhangsan</username> // 表示的是键值对 key:username value: zhangsan&l…

NURBS样条曲线学习

搞3D几何内核算法研究&#xff0c;必须学习NURBS样条曲线曲面。 看《非均匀有理B样条 第2版》这本书&#xff0c;学习起来&#xff0c;事半功倍。 在《插件化算法研究平台》上&#xff0c;做了一个样条曲线研究功能&#xff0c;可以分析Bezier曲线、BSpline、NURBS曲线的各种…

Python常见的第三方库[详细解析]

Python是通过模块来体现库&#xff0c;常见的有标准库和第三方库。标准库是Python自带的库&#xff0c;在官方文档中可以查看&#xff0c;第三方库是其他大佬做出来的。 库它的优点有:1.降低程序员的学习成本 2.提高程序的开发效率 。 第1个常见的库为datetime&#xff0c;我们…

吉时利2450源表如何调整电流精度?

吉时利2450源表是一款高精度的电流源表&#xff0c;可用于精确控制和测量电流。调整电流精度是确保吉时利2450源表准确输出所需电流的关键步骤。本文将介绍吉时利2450源表如何调整电流精度的方法和注意事项。 准备工作 在开始调整电流精度之前&#xff0c;确保吉时利2450源表…

ArcGIS小技巧—基于DEM的河网提取

1、使用DEM数据提取河流水系网络 原始DEM数据中存在误差&#xff0c;或喀斯特地貌等真实地形情况&#xff0c;将引起DEM数据中存在凹陷区域。 在进行水流方向的计算上&#xff0c;如果有洼地会造成错误&#xff0c;因此我们需要进行填洼处理&#xff0c;获得相对准确的DEM数据…