实现一个接收 POST 方法上传文件的函数,能自动创建路径,保存文件
时间: 2024-03-01 08:55:03 浏览: 97
以下是使用 Go 语言实现接收 POST 方法上传文件的函数,并自动创建路径保存文件的代码:
```go
package main
import (
"fmt"
"io"
"net/http"
"os"
"path/filepath"
)
func main() {
http.HandleFunc("/upload", uploadHandler)
http.ListenAndServe(":8080", nil)
}
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
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(filepath.Join("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, "File Uploaded Successfully")
} else {
w.WriteHeader(http.StatusMethodNotAllowed)
}
}
```
以上代码中,我们使用了 Go 语言内置的 `net/http` 包,实现了一个名为 `uploadHandler()` 的函数,该函数可以接收 POST 方法上传的文件。上传的文件通过 `r.FormFile("file")` 获取,判断是否存在错误后,我们使用 `os.MkdirAll()` 创建了上传文件的保存路径。接着,我们使用 `os.OpenFile()` 创建文件,通过 `io.Copy()` 函数将上传的文件内容保存到该文件中。最后,我们向客户端发送上传成功的响应。
在这个示例中,我们将上传的文件保存在了名为 `uploads` 的文件夹中,当然,您可以根据实际情况修改文件夹名称和路径。值得注意的是,我们使用了 `defer` 关键字延迟关闭打开的文件和文件流,避免资源泄漏。
阅读全文