golang通过FTP上传,同时获取FTP进度

我使用http://github.com/dutchcoders/goftp通过 FTP 发送文件。它可以正常工作,但是当我想上传文件并获取该文件信息时(同时)它不起作用!


fileName := "sth"

var err error

var ftp *goftp.FTP


if ftp, err = goftp.Connect("serverip:port"); err != nil {

    fmt.Println(err)

}


defer ftp.Close()


config := tls.Config{

    InsecureSkipVerify: true,

    ClientAuth:         tls.RequestClientCert,

}


if err = ftp.AuthTLS(config); err != nil {

    //      log.Println("1", err)

}


if err = ftp.Login("userName", "pass"); err != nil {

    log.Println("2", err)

}

//

if err = ftp.Cwd("/home/myDir/"); err != nil {

    log.Println("3", err)

}


var file *os.File

if file, err = os.Open(fileName); err != nil {

    log.Println("6", err)

}

defer file.Close()


fmt.Println("start")


go func() {

    fmt.Println("first")

    nmp := ftp.Stor(fileName, file)

    if nmp != nil {

        log.Println("7", err)

    } else {

        fmt.Println("first is runung")


    }

}()


go func() {

    fmt.Println("second")

    for {

        files, nms := ftp.List(fileName)

        if nms == nil {

            fmt.Println(files)

        }

        time.Sleep(1 * time.Second)

    }

}()


fmt.Println("end")


var mnmn string

fmt.Scan(&mnmn)

ftp.Stor func 不会运行,我的代码返回以下输出:


start

end

first

second

2016/05/31 13:21:38 7 <nil>

[]

[]


狐的传说
浏览 245回答 1
1回答

绝地无双

目前,这两个 goroutine 都有相同的 ftp 实例(var ftp *goftp.FTP),它们相互阻塞,因为它们有竞争条件。你的结果是不可预测的。有时,它在第一次正确执行时会给出正确的结果。或者当它等待第二个然后完全运行时。或者当 first 不执行时。否则,两个 go 例程都会相互阻塞。解决方案:您使用两个不同的 ftp 实例来为 goroutine 提供不同的连接var&nbsp;ftp,ftp1&nbsp;*goftp.FTP喜欢这里玩 Golang&nbsp;或在 main go 例程中首先有 *goftp 存储。然后开始其他 goroutine。但这会破坏第二次围棋例程的目的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go