登录
首页 >  Golang >  Go问答

Golang使用sftp golang库将远程文件复制到本地文件夹

来源:Golang技术栈

时间:2023-04-30 21:54:08 334浏览 收藏

从现在开始,努力学习吧!本文《Golang使用sftp golang库将远程文件复制到本地文件夹》主要讲解了golang等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我得到了在远程主机上创建文件的代码:

config := &ssh.ClientConfig{
    User:            "xx",
    HostKeyCallback: nil,
    Auth: []ssh.AuthMethod{
        ssh.Password("xx"),
    },
}

config.SetDefaults()
sshConn, err := ssh.Dial("tcp", "192.xx.1.xx:22", config)
if err != nil {
    panic(err)
}
defer sshConn.Close()

client, err := sftp.NewClient(sshConn)
if err != nil {
    panic(err)
}
defer client.Close()

file, err := client.Create("/www/hello9.txt")
if err != nil {
    panic(err)
}
defer file.Close()

if _, err := file.Write([]byte("Hello world")); err != nil {
    log.Fatal(err)
}

但是需要将文件从远程主机复制到本地主机。如何仅使用 golang 工具 github.com/pkg/sftpgolang.org/x/crypto/ssh 来实现这一点?

正确答案

您可以使用 sftp 包中的Open(path string)andWriteTo(w io.Writer)方法来完成它(当然您需要一个 os.File 或类似的东西来写入)。

client, err := ssh.Dial("tcp", "192.x.x.x:22", sshConfig)
if err != nil {
    panic("Failed to dial: " + err.Error())
}
fmt.Println("Successfully connected to ssh server.")

// open an SFTP session over an existing ssh connection.
sftp, err := sftp.NewClient(client)
if err != nil {
    log.Fatal(err)
}
defer sftp.Close()

srcPath := "/tmp/"
dstPath := "C:/temp/"
filename := "test.txt"

// Open the source file
srcFile, err := sftp.Open(srcPath + filename)
if err != nil {
    log.Fatal(err)
}
defer srcFile.Close()

// Create the destination file
dstFile, err := os.Create(dstPath + filename)
if err != nil {
    log.Fatal(err)
}
defer dstFile.Close()

// Copy the file
srcFile.WriteTo(dstFile)

今天关于《Golang使用sftp golang库将远程文件复制到本地文件夹》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>