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) //监听端口 }
测试方式
763 Views