在Go語言中,可以使用net/http
包來實現大文件上傳。下面是一個簡單的示例:
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func uploadFile(w http.ResponseWriter, r *http.Request) {
// 限制最大上傳文件大小
r.ParseMultipartForm(32 << 20) // 32MB
file, handler, err := r.FormFile("file")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// 創建一個新文件用于保存上傳的文件
f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
// 將上傳的文件內容復制到新文件中
io.Copy(f, file)
fmt.Fprintf(w, "上傳成功")
}
func main() {
http.HandleFunc("/upload", uploadFile)
http.ListenAndServe(":8000", nil)
}
上述代碼創建了一個HTTP服務器,監聽在localhost:8000
上。當客戶端發送一個POST請求到/upload
路徑時,服務器將接收到的文件保存到本地。
在客戶端發送請求時,需要將要上傳的文件作為multipart/form-data
類型的請求體中的一個字段進行傳遞,字段的名稱為file
。可以使用curl
命令進行測試:
$ curl -F "file=@/path/to/file" http://localhost:8000/upload
以上示例中,上傳的文件將被保存在當前目錄下,文件名與原文件名相同。
需要注意的是,上述示例沒有實現上傳進度的監控,如果需要監控上傳進度,可以使用第三方庫,如github.com/cheggaaa/pb
。