版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangxianghehe/article/details/78310249

Go语言实现的ftp库挺多的,我在这里尝试了一个简单的版本,地址https://github.com/dutchcoders/goftp
先安装依赖:

go get -u -v github.com/dutchcoders/goftp
  • 1

然后配置好ftp服务器,编译执行以下代码,代码包括列出列表和上传功能:

package main

import (
"github.com/dutchcoders/goftp"
"fmt"
"os"
) func main() {
var err error
var ftp *goftp.FTP // For debug messages: goftp.ConnectDbg("ftp.server.com:21")
if ftp, err = goftp.Connect("server_ip:21"); err != nil {
panic(err)
} defer ftp.Close()
fmt.Println("Successfully connected !!") // Username / password authentication
if err = ftp.Login("user", "pass"); err != nil {
panic(err)
} if err = ftp.Cwd("/home/ftp"); err != nil {
panic(err)
} var curpath string
if curpath, err = ftp.Pwd(); err != nil {
panic(err)
} fmt.Printf("Current path: %s", curpath) // Get directory listing
var files []string
if files, err = ftp.List(""); err != nil {
panic(err)
}
fmt.Println("Directory listing:/n", files) // Upload a file
var file *os.File
if file, err = os.Open("E://6楼花名册.xlsx"); err != nil {
panic(err)
} if err := ftp.Stor("/home/ftp/6楼花名册.xlsx", file); err != nil {
panic(err)
} }

上传文件代码示例如下:

// Package goftp upload helper
package goftp import (
"os"
"path/filepath"
) func (ftp *FTP) copyDir(localPath string) error {
fullPath, err := filepath.Abs(localPath)
if err != nil {
return err
} pwd, err := ftp.Pwd()
if err != nil {
return err
} walkFunc := func(path string, fi os.FileInfo, err error) error {
// Stop upon error
if err != nil {
return err
}
relPath, err := filepath.Rel(fullPath, path)
if err != nil {
return err
}
switch {
case fi.IsDir():
// Walk calls walkFn on root as well
if path == fullPath {
return nil
}
if err = ftp.Mkd(relPath); err != nil {
if _, err = ftp.List(relPath + "/"); err != nil {
return err
}
}
case fi.Mode()&os.ModeSymlink == os.ModeSymlink:
fInfo, err := os.Stat(path)
if err != nil {
return err
}
if fInfo.IsDir() {
err = ftp.Mkd(relPath)
return err
} else if fInfo.Mode()&os.ModeType != 0 {
// ignore other special files
return nil
}
fallthrough
case fi.Mode()&os.ModeType == 0:
if err = ftp.copyFile(path, pwd+"/"+relPath); err != nil {
return err
}
default:
// Ignore other special files
} return nil
} return filepath.Walk(fullPath, walkFunc)
} func (ftp *FTP) copyFile(localPath, serverPath string) (err error) {
var file *os.File
if file, err = os.Open(localPath); err != nil {
return err
}
defer file.Close()
if err := ftp.Stor(serverPath, file); err != nil {
return err
} return nil
} // Upload a file, or recursively upload a directory.
// Only normal files and directories are uploaded.
// Symlinks are not kept but treated as normal files/directories if targets are so.
func (ftp *FTP) Upload(localPath string) (err error) {
fInfo, err := os.Stat(localPath)
if err != nil {
return err
} switch {
case fInfo.IsDir():
return ftp.copyDir(localPath)
case fInfo.Mode()&os.ModeType == 0:
return ftp.copyFile(localPath, filepath.Base(localPath))
default:
// Ignore other special files
} return nil
}

go语言实现简易ftp客户端的更多相关文章

  1. C语言:自己编写的简易ftp客户端,包含(列表,进入目录,上传文件,下载文件,删除文件)功能

    //简易ftp客户端#include <stdio.h> #include <string.h> #include <sys/types.h> #include & ...

  2. WebSocket实现简易的FTP客户端

    WebScoket的简单应用,实现一个简易的FTP,即文件上传下载,可以查看上传人,下载次数,打开多个Web可以多人上传. 说在前面的话 文件传输协议(File Transfer Protocol,F ...

  3. ClassicFTP for Mac(FTP 客户端)破解版安装

    1.软件简介    ClassicFTP 是 macOS 系统上一款易于使用的 FTP 客户端,让您能够从远程服务器(网站)或网络查看,编辑,上传,下载和删除文件的免费的软件.Mac 下的一款使用 F ...

  4. 使用 Socket 通信实现 FTP 客户端程序(来自IBM)

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

  5. 【RL-TCPnet网络教程】第37章 RL-TCPnet之FTP客户端

    第37章      RL-TCPnet之FTP客户端 本章节为大家讲解RL-TCPnet的FTP客户端应用,学习本章节前,务必要优先学习第35章的FTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...

  6. 【转载】HTTP/FTP客户端开发库:libwww、libcurl、libfetch

    网页抓取和ftp访问是目前很常见的一个应用需要,无论是搜索引擎的爬虫,分析程序,资源获取程序,WebService等等都是需 要的,自己开发抓取库当然是最好了,不过开发需要时间和周期,使用现有的Ope ...

  7. 使用Socket通信实现FTP客户端程序

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

  8. Linux FTP客户端

    1.File Zilla File Zilla是一个开源的,跨平台的Linux FTP客户端.File Zilla有一个标签式的用户界面,允许用户查看正在传输的文件的所有细节.File Zilla是通 ...

  9. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

随机推荐

  1. PostMan测试Web Service

    1.设置URL 2.设置请求模式:Post 3.设置Header:添加 Content-Type ,值为 text/xml;charset=utf-8 4.设置Body:勾选raw 5.输入Body内 ...

  2. 【项目构建工具】 Gradle笔记2

    一.Gradle执行流程 1.Gradle的执行流程(生命周期)主要是三个阶段: 初始化阶段:解析整个工程中所有Project,构建所有的Project对应的project对象 配置阶段:解析所有的p ...

  3. Linux :file、which 、whereis、locate、find

    1 file 观察文件类型 file  文件 2 which 寻找文件 选项与参数: -a : 将所有由PATH目录中可以知道的指令列出,而不止一个被找到的指令名称 3 whereis 寻找特定文件 ...

  4. Jmeter多接口测试之参数传递

    接口测试包含单接口测试和多接口测试,通过组合多个接口实现一组功能的验证称为多接口测试,单接口重在单个接口多种请求组合的响应断言,多接口重在组合不同接口,实现流程的串联和验证.多接口测试涉及到接口之间参 ...

  5. autocomplete用法

    今天又使用到 jquery-ui.min.js中的autocomplete这个方法了,记得第一次是在实习的时候已经是一年前了,现在只记得个模样了,所以去找了原来的代码,整理的半天才有理顺,这里分享一下 ...

  6. (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决

    在idea上怎么才能使用Spring的热部署 这里仅用Maven做介绍 (1)在Maven中添加依赖 (2)在插件配置 但是,为什么配置了还是没有用呢 ?! 这是因为idea默认是没有自动编译的,我们 ...

  7. 杜教BM模板

    #include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #defi ...

  8. Codeforces 837D - Round Subset DP

    先算出每个数的pop1(twonum),pop(fivenum)然后DP ans[i][j]表示选i个数有j个2时最多有多少个5 转移方程是 ;j--) { ;w++) { ans[j][w]=max ...

  9. 批处理清除svn版本信息

    for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"

  10. 介绍知道的http返回的状态码

    100    Continue    继续.客户端应继续其请求 101    Switching Protocols    切换协议.服务器根据客户端的请求切换协议.只能切换到更高级的协议,例如,切换 ...