Go·通过POST上传文件,并存到文件夹中

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) //监听端口
}

测试方式

1,052 Views
分享你的喜爱
linwute
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注