SFTP
用于远程传输文件;基于SSH协议设计,所以传输文件前首先要建立SSH连接,在 Golang | SSH Note 有关于SSH包的使用笔记,同时,使用SSH也可以完成远程文件传输。
Demo
官方示例:基本包含了常用的业务情景代码。
建立SSH连接
👉 Golang | SSH Note
创建SFTP客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// NewSftpClient receive *ssh.Client as parameter that be used to initialize *sftp.Client
func NewSftpClient (sshClient *ssh.Client) (*sftp.Client, error) {
var (
err error
sftpClient *sftp.Client
)
if sftpClient, err = sftp.NewClient(sshClient); err != nil {
fmt.Println(err.Error())
return nil, err
}
return sftpClient, nil
}
|
发送文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
func uploadFile(file string, sftpClient *sftp.Client) {
srcFile, err := os.Open(file)
if err != nil {
fmt.Println(err.Error())
return
}
defer srcFile.Close()
remoteDir := "/remote/dir"
remoteFilename := path.Base(file)
dstFile, err := sftpClient.Create(path.Join(remoteDir, remoteFilename))
if err != nil {
fmt.Println(err.Error())
return
}
defer dstFile.Close()
buf := make([]byte, 1024)
for {
n, _ := srcFile.Read(buf)
if n == 0 {
break
}
dstFile.Write(buf)
}
}
|
获取文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
func downloadFile(remoteFile string, sftpClient *sftp.Client) {
srcFile, err := sftpClient.Open(remoteFile)
if err != nil {
fmt.Println(err.Error())
return
}
defer srcFile.Close()
localDir := "/local/dir"
localFilename := path.Base(remoteFile)
dstFile, err := os.Create(path.Join(localDir, localFilename))
if err != nil {
fmt.Println(err.Error())
return
}
defer dstFile.Close()
if _, err := srcFile.WriteTo(dstFile); err != nil {
fmt.Println(err.Error())
return
}
}
|
See Also
Thanks to the authors 🙂