加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang通过FTP上传并同时获得FTP进度

发布时间:2020-12-16 09:23:21 所属栏目:大数据 来源:网络整理
导读:我用 http://github.com/dutchcoders/goftp通过FTP发送文件.它正常工作,但当我想上传文件并获取该文件信息(同时)它不起作用! fileName := "sth"var err errorvar ftp *goftp.FTPif ftp,err = goftp.Connect("serverip:port"); err != nil { fmt.Println(err
我用 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将无法运行,我的代码返回低于输出:

06001

解决方法

目前,两个goroutine都有相同的ftp实例(var ftp * goftp.FTP
因为他们有竞争条件而互相阻挡.而你的结果是不可预测的.有时,它会在第一次正确执行时给出正确的结果.或者当它等待第二个然后完全运行时.或者当第一次没有执行时.否则,go例程都会相互阻塞.
Solutons:

>您使用两个不同的ftp实例来提供与goroutine的不同连接

var ftp,ftp1 *goftp.FTP

像这里Play Golang
要么

>在主要的日常工作中首先拥有* goftp stor.然后开始其他日常工作.但它会破坏第二次例程的目的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读