以下是一个简单的上传文件的示例代码:

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func uploadFile(w http.ResponseWriter, r *http.Request) {
	// 设置内存大小限制为 32MB
	r.ParseMultipartForm(32 << 20)
	// 获取上传的文件
	file, handler, err := r.FormFile("file")
	if err != nil {
		fmt.Println("Error Retrieving the File")
		fmt.Println(err)
		return
	}
	defer file.Close()
	// 创建上传目录
	err = os.MkdirAll("uploads", os.ModePerm)
	if err != nil {
		fmt.Println(err)
		return
	}
	// 创建上传文件
	f, err := os.OpenFile("./uploads/"+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, "Successfully Uploaded File\n")
}

func main() {
	http.HandleFunc("/upload", uploadFile)
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		fmt.Println(err)
		return
	}
}

在上面的代码中,我们使用 http.HandleFunc() 函数来注册一个处理函数 uploadFile,当客户端请求 /upload 路径时,就会执行这个函数。

uploadFile 函数中,我们先调用 r.ParseMultipartForm() 函数来解析表单数据,这样就可以获取客户端上传的文件。然后,我们使用 os.MkdirAll() 函数来创建上传目录,如果目录已经存在,该函数会直接返回。接着,我们使用 os.OpenFile() 函数来创建上传文件,这个函数的第一个参数是文件路径,第二个参数是打开文件的模式,第三个参数是文件的权限。最后,我们使用 io.Copy() 函数将上传文件拷贝到目标文件中。

main 函数中,我们使用 http.ListenAndServe() 函数来启动一个 HTTP 服务器,用来处理客户端请求。

go 实现上传文件功能

原文地址: https://www.cveoy.top/t/topic/Nd2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录