golang上传文件到ftp服务器

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

package ftp

import "context"

type Client interface {
	// UploadFile 上传文件
	UploadFile(ctx context.Context, opt *UploadFileOpt) error
}

type UploadFileOpt struct {
	Data           []byte
	RemoteFileName string
	Dir            string
}

package ftp

import (
	"bytes"
	"context"
	"github.com/jlaffaye/ftp"
)

// FtpClient 结构体包含 FTP 客户端的配置信息
type FtpClient struct {
	Addr       string
	Name       string
	Pwd        string
	Dir        string
	Connection *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 = conn
	return 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.Dir
	if 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
}

相关推荐

  1. golang文件ftp服务器

    2024-04-26 07:30:04       45 阅读
  2. FTP文件与下载

    2024-04-26 07:30:04       37 阅读
  3. 微信小程序 图片文件服务器

    2024-04-26 07:30:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 07:30:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 07:30:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 07:30:04       82 阅读
  4. Python语言-面向对象

    2024-04-26 07:30:04       91 阅读

热门阅读

  1. 【计算机系统】

    2024-04-26 07:30:04       28 阅读
  2. 前端网络---网络安全

    2024-04-26 07:30:04       32 阅读
  3. Swift中TableView的编辑模式

    2024-04-26 07:30:04       31 阅读
  4. 稳扎稳打进入科研方向的三个阶段

    2024-04-26 07:30:04       37 阅读
  5. docker 使用和安装go

    2024-04-26 07:30:04       31 阅读
  6. Python基础:【习题系列】函数

    2024-04-26 07:30:04       31 阅读
  7. python爬取电影

    2024-04-26 07:30:04       33 阅读
  8. 2024年新版宝塔面板如何安装WordPress网站教程

    2024-04-26 07:30:04       32 阅读
  9. SSH远程直连服务器docker容器的jupyter

    2024-04-26 07:30:04       38 阅读
  10. 线程、线程组、线程池、锁、事务、分布式

    2024-04-26 07:30:04       33 阅读
  11. CentOS中安装python3

    2024-04-26 07:30:04       31 阅读
  12. go 环境安装

    2024-04-26 07:30:04       32 阅读