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("写入文件失败")
} }
}
最新文章
- VirtualBox 共享文件夾
- 【转】cloudera新增用户权限配置
- magento去掉小数点后面的0
- ubuntu网络配置
- ByteArray
- MongoDB 学习笔记(原创)
- Python学习_argsparse
- 237. Delete Node in a Linked List(leetcode)
- freemarker写select组件(四)
- lua向文件中写入数据,进行记录
- underscore源码阅读
- 获取网页title(还有一坑未填)
- 【解决】Can't find default configuration ";arch/x86/configs/xx_defconfig";!
- [WC2014]紫荆花之恋
- Struts2 中常用的代码
- tomcat顺序图摘要
- go-elasticsearch 来自官方的 golang es client
- Alpha 冲刺三
- 内存与cpu的关系
- spring4 知识点
热门文章
- 19 Maven---项目管理工具
- 解决python中的Non-UTF-8 code starting with ‘\xbs4’ in file错误
- 5. JDBC/ODBC服务器
- Luogu4705 玩游戏 分治FFT
- [LOJ#3119][Luogu5400][CTS2019]随机立方体(容斥+DP)
- Spring Cloud Alibaba学习笔记(16) - Spring Cloud Gateway 内置的路由谓词工厂
- Java中 StringBuffer StringBuilder String 区别
- NEST 字符串sort
- IOS 之 NSBundle 使用
- python 笔记一