• go实现文件的上传


    上传端

    send.go

    package main

    import (
    "fmt"
    "io"
    "net"
    "os"
    )

    func main() {

    fmt.Println("请输入要传输的文件")
    var filePath string
    fmt.Scan(&filePath)
    info,err := os.Stat(filePath)
    if err !=nil{
    fmt.Println("获取文件属性失败")
    }
    conn,err := net.Dial("tcp","127.0.0.1:8000")
    if err !=nil{
    fmt.Println("连接服务器出错")
    }
    defer conn.Close()
    _,err = conn.Write([]byte(info.Name()))
    if err!=nil{
    fmt.Println("发送文件名出错")
    }
    buff := make([]byte,1024)
    n,err:= conn.Read(buff)
    if err !=nil {
    fmt.Println(err)
    }
    str := string(buff[:n])
    if "ok" !=str{
    fmt.Println("接收文件错误")
    }
    sendFile(filePath ,conn)

    }
    func sendFile(filePath string,conn net.Conn) {
    buff := make([]byte,1024)
    fileHandle,err := os.Open(filePath)//打开文件
    if err!=nil{
    if err == io.EOF{
    fmt.Println("发送文件完毕")
    }else{
    fmt.Println("打开文件失败")
    }

    return
    }
    defer fileHandle.Close() //关闭文件
    n,err := fileHandle.Read(buff)//读取文件内容
    if err!=nil{
    fmt.Println("读取文件失败")
    return
    }
    conn.Write(buff[:n]);
    }

    接收端(服务器端)recive.go

    package main

    import (
    "fmt"
    "io"
    "net"
    "os"
    )

    func main() {

    lisener,err := net.Listen("tcp","127.0.0.1:8000")
    if err !=nil{
    fmt.Println("监听失败")
    }
    defer lisener.Close()
    conn,err :=lisener.Accept()
    defer conn.Close()
    if err !=nil{
    fmt.Println("连接失败")
    }
    buffer := make([]byte,1024)
    n,err :=conn.Read(buffer)
    if err!=nil{
    fmt.Println("获取内容失败")
    }
    fileNme :=string(buffer[:n])

    _,err = conn.Write([]byte("ok"))
    if err !=nil{
    fmt.Println("发送内容失败")
    }
    reciveFile(fileNme,conn)

    }
    func reciveFile(filName string,conn net.Conn){
    file,err := os.Create(filName)
    if err!=err{
    fmt.Println(err)
    return
    }
    buff := make([]byte,1024)
    for{

    n,err := conn.Read(buff)
    if err!=nil{
    if err == io.EOF{
    fmt.Println("文件接收完毕")
    return
    }else {
    fmt.Println("读取内容失败")
    }
    }
    if n==0{
    fmt.Println("文件传输完毕")
    return
    }
    _,err =file.Write([]byte(buff[:n]))
    if err!=nil{
    fmt.Println("写入文件失败")
    }

    }
    }
  • 相关阅读:
    【机器学习】:Xgboost/LightGBM使用与调参技巧
    Golang map 源码
    Golang slice、array 源码
    Golang string 源码
    Golang sync.Mutex
    Golang net/http
    Golang GMP模型
    转发:全套支付宝系统架构(含内部架构图),非常好的收藏学习!
    付款 案例 研究
    (转发)Java学习路线
  • 原文地址:https://www.cnblogs.com/paulversion/p/11617713.html
Copyright © 2020-2023  润新知