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("寫入文件失敗")
}

}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM