Golang中如何实现文件传输?代码举例讲解

在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到服务器上传文件。