golang連接ftp服務器


最近因為要用最一個簡易網盤,主要功能是對接企業已有的ftp服務器和smb服務器。這篇博客主要是講golang對接ftp服務器

go get github.com/dutchcoders/goftp

  使用的是一個荷蘭開發者作為主導的包,當時主要是因為有一個博主在CSDN上分享過這個包的使用方法,所以當時就去看了下這個包的源碼。

1.連接

goftp.Connect(connConfig)
// connConfig是地址配置,ip:端口的一個字符串,如:localhost:2121

  這個方法執行過之后會返回一個ftp連接對象和err,之后拿着這個ftp對象就可以去使用內置的方法對ftp服務器進行操作了

2.登錄

theConn.Login(username, pwd)
// theConn是1中返回的ftp對象

  這個就是登錄ftp服務器,還是操作之前的ftp對象,也就是goftp.FTP這個類實例化出的對象的方法。

3.獲取當前路徑

theConn.Pwd()

4.切換路徑

theConn.Cwd("路徑")

  切換工作目錄,這個是基於當前路徑走的。如果剛登錄FTP服務器的話,你的路徑打印Pwd的結果就是空字符串。這時候輸入相對路徑即可。這個參數是支持.(當前目錄)和..(上級目錄)的。如果是在根目錄下,切換..是不會報錯的,還是在當前目錄。

5.查看當前目錄

theConn.List("")

  參數同上,執行完之后顯示的是目錄結構和各個文件或文件夾的權限,這里返回的是一個大字符串。我是通過正則做的匹配。\\S*\r\n獲取名稱,^[d-](\\S*)\\s獲取讀寫權限,這兩個都是regexp.Compile的參數。

以上是一些基礎方法,還有一些其他的,可以去看源碼。比如Rename重命名,Mkd新建文件夾。

下面說一下這個的上傳和下載(上傳源碼處是有實例的,可以直接去github里面看,或者參考博客https://blog.csdn.net/xiangxianghehe/article/details/78310249

上傳的話之前說的那個類里有一個Retr方法,這個方法需要兩個參數,第一個是文件名,第二個是一個文件處理方法

type (
// WalkFunc is called on each path in a Walk. Errors are filtered through WalkFunc
	WalkFunc func(path string, info os.FileMode, err error) error

// RetrFunc is passed to Retr and is the handler for the stream received for a given path
	RetrFunc func(r io.Reader) error
)

  源碼中只定義了這個接口,但是沒有實現,因為這個對於每個文件的處理都是不一樣的,需要你自己去定義自己需要的這個文件操作,因此只要去實現這個方法,在調用下載接口的時候傳入你的方法就行了。

type File2 struct {
	Name    string
	Content []byte
}

func (f *File2) GetFile(r io.Reader) error {
	var buf = new(bytes.Buffer)
	_, err := io.Copy(buf, r)
	CheckErr(err)
	var n = buf.Len()
	var res = []byte{}
	for {
		var b []byte
		switch {
		case n > 1024:
			b = make([]byte, 1024)
			n -= 1024
		default:
			b = make([]byte, n)
		}
		fmt.Println(len(b))
		size, err := buf.Read(b)
		if err != nil && err != io.EOF {
			fmt.Println(err)
			return err
		}
		if size == 0 {
			break
		}
		res = append(res, b...)
	}
	fmt.Println(res)
	f.Content = res
	return nil
}

  因為能力有限,架上功能比較簡單就是一個小文件的下載,所以這里就簡單打個樣,如果有人寫了不錯的文件處理,請把鏈接留在本文評論,以供大家參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM