日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

go语言实现简易ftp客户端

發布時間:2025/7/14 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go语言实现简易ftp客户端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 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 mainimport ("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 goftpimport ("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 }

轉載于:https://www.cnblogs.com/lvdongjie/p/9554849.html

總結

以上是生活随笔為你收集整理的go语言实现简易ftp客户端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。