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将无法运行,我的代码返回低于输出:
解决方法
目前,两个goroutine都有相同的ftp实例(var ftp * goftp.FTP
因为他们有竞争条件而互相阻挡.而你的结果是不可预测的.有时,它会在第一次正确执行时给出正确的结果.或者当它等待第二个然后完全运行时.或者当第一次没有执行时.否则,go例程都会相互阻塞. Solutons: >您使用两个不同的ftp实例来提供与goroutine的不同连接 var ftp,ftp1 *goftp.FTP 像这里Play Golang >在主要的日常工作中首先拥有* goftp stor.然后开始其他日常工作.但它会破坏第二次例程的目的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |