Go·通过POST上传文件,并存到文件夹中
// 处理/upload 逻辑
// 处理/upload 逻辑
func getUpload(w http.ResponseWriter, r *http.Request) {
//获取请求的方法
year := strconv.Itoa(time.Now().Year())
Month := strconv.Itoa(int(time.Now().Month()))
fmt.Println("date:", time.Now().Format("2006-01-02"))
fmt.Println("method:", r.Method)
//GET的处理操作
if r.Method == "GET" {
crutime := time.Now().Unix()
h := md5.New()
io.WriteString(h, strconv.FormatInt(crutime, 10))
token := fmt.Sprintf("%x", h.Sum(nil))
t, _ := template.ParseFiles("upload.gtpl")
t.Execute(w, token)
} else {
//设置内存大小
r.ParseMultipartForm(8 << 20)
//获取上传文件
file, handler, err := r.FormFile("uploadfile")
if err != nil {
fmt.Println("获取上传文件异常", err)
return
}
defer file.Close()
fmt.Fprintf(w, "%v", handler.Header)
//创建上传目录
os.Mkdir("./upload/"+year+"/"+Month+"/", os.ModePerm)
//创建上传文件
f, err := os.Create("./upload/" + year + "/" + Month + "/" + handler.Filename)
//f, err := os.OpenFile("./upload/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) // 此处假设当前目录下已存在test目录
if err != nil {
fmt.Println("创建上传文件异常", err)
return
}
defer f.Close()
io.Copy(f, file)
}
}//上传多个文件逻辑
//上传存储多个文件 处理/upload 逻辑
func getUpload(w http.ResponseWriter, r *http.Request, uploadName string) []string {
year := strconv.Itoa(time.Now().Year())
Month := strconv.Itoa(int(time.Now().Month()))
var url []string
//设置内存大小
r.ParseMultipartForm(8 << 20)
//获取上传的文件组
files := r.MultipartForm.File["uploadfile"]
len := len(files)
for i := 0; i < len; i++ {
//打开上传文件
file, err := files[i].Open()
defer file.Close()
if err != nil {
log.Fatal(err)
}
//创建上传目录
os.Mkdir("./upload/", os.ModePerm)
//创建上传文件
cur, err := os.Create("./upload/" + files[i].Filename)
defer cur.Close()
if err != nil {
log.Fatal(err)
}
io.Copy(cur, file)
ss := "./upload/" + files[i].Filename
url = append(url, ss)
//fmt.Println(files[i].Filename) //输出上传的文件名
}
return url
}引用方式
func main() {
fmt.Println("Linwute 2022-07-29")
http.HandleFunc("/getUpload", getUpload) // 上传文件
http.ListenAndServe("127.0.0.1:8088", nil) //监听端口
}测试方式

