go 实现上传文件功能
以下是一个简单的上传文件的示例代码:
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 服务器,用来处理客户端请求。
原文地址: https://www.cveoy.top/t/topic/Nd2 著作权归作者所有。请勿转载和采集!