在Golang中,可以使用net/http和io包来实现文件传输。代码示例:
服务器:
go
// 处理文件上传请求
http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) {
// 读取文件数据
file, header, err := r.FormFile("file")
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// 创建文件
f, err := os.Create("/tmp/" + header.Filename)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer f.Close()
// 拷贝数据到文件
io.Copy(f, file)
})
http.ListenAndServe(":8000", nil)
服务器会接收客户端上传的文件,读取文件数据并保存到服务器的/tmp文件夹下。
客户端:
go
// 上传文件
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile("file", file.Name())
if err != nil {
log.Fatal(err)
}
// 拷贝文件数据到part
io.Copy(part, file)
writer.Close()
req, err := http.NewRequest("POST", "http://localhost:8000/upload", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
客户端会打开本地文件file.txt,然后创建一个multipart form,拷贝文件数据到form,设置Content-Type头,最后POST该form到服务器上传文件。