好久没记录碰到的问题和学习的东西了,最近用学习用golang写东西,用一个客户端发送文件到服务端,服务端按原目录创建文件,并把文件的svn信息,文件内容传入数据库,记录的原因主要是之前在网上找golang执行命令获取svn信息找了好久只有零零星星的信息,最后我是根据这些信息试出来的,所以分享一下,希望能帮到有需要的人。
client
package main
import (
"fmt"
"github.com/axgle/mahonia"
"io"
"io/ioutil"
"net"
"os"
"os/exec"
"regexp"
)
func main() {
dir := "你的文件目录(f:\xx\xx)"
f,err := ioutil.ReadDir(dir)
if err != nil{
fmt.Println(err)
return
}
//等接收方回应
//for {
for fileIndex,file := range f {
if file.IsDir() {
xfiles, _ := GetAllFiles(dir+"\\"+file.Name())
for _, fileName := range xfiles {
createConn(file,fileName)
fmt.Printf("获取的文件为[%s]\n", fileName)
}
fmt.Println(fileIndex)
} else {
conn,err1 := net.Dial("tcp","127.0.0.1:9090")
if err1 != nil{
fmt.Println("dial error:",err1)
return
}
defer conn.Close()
verision := getSvnInfo(dir+"\\"+file.Name())
_, err = conn.Write([]byte(dir+"\\"+file.Name()+"|"+"1"+"|"+verision))
if err != nil {
fmt.Println("conn write server err:", err)
break
}
var n int
buf := make([]byte, 1024)
n, err = conn.Read(buf)
if err != nil {
fmt.Println("conn.read err=", err)
break
}
fmt.Printf("遍历文件[%s]", file.Name())
if "ok" == string(buf[:n]) {
sendFile(dir+"\\"+file.Name(), conn)
}
}
//}
}
//info, err := os.Stat(dir) //获取文件属性
//if err != nil {
// fmt.Println("err = ", err)
// return
//}
先发送一次文件名
//_, err = conn.Write([]byte(info.Name()))
//if err != nil {
// fmt.Println("conn Write server err : ", err)
// return
//}
//
坐等接收对方的回应(最好是 "ok" )
//var n int
//buf := make([]byte, 1024)
//n, err = conn.Read(buf)
//if err != nil {
// fmt.Println("conn.Read err = ", err)
// return
//}
//if "ok" == string(buf[:n]) {
// //发送文件
// sendFile(dir, conn)
//}
}
func createConn(file os.FileInfo,dir string) {
conn,err1 := net.Dial("tcp","127.0.0.1:9090")
if err1 != nil{
fmt.Println("dial error:",err1)
return
}
verision := getSvnInfo(dir)
defer conn.Close()
var err error
_, err = conn.Write([]byte(dir+"|"+"2"+"|"+verision))
if err != nil {
fmt.Println("conn write server err:", err)
return
}
var n int
buf := make([]byte, 1024)
n, err = conn.Read(buf)
if err != nil {