package main import ( "crypto/md5" "fmt" "io" "os" "strconv" "time" "github.com/kataras/iris" "github.com/kataras/iris/context" "github.com/kataras/iris/view" ) func main() { app := iris.New() app.AttachView(view.HTML("./templates", ".html")) // Serve the form.html to the user app.Get("/upload", func(ctx context.Context) { //create a token (optionally) now := time.Now().Unix() h := md5.New() io.WriteString(h, strconv.FormatInt(now, 10)) token := fmt.Sprintf("%x", h.Sum(nil)) // render the form with the token for any use you like ctx.ViewData("", token) ctx.View("upload_form.html") }) // Handle the post request from the upload_form.html to the server app.Post("/upload", context.LimitRequestBodySize(10<<20), func(ctx context.Context) { // or use ctx.SetMaxRequestBodySize(10 << 20) //to limit the uploaded file(s) size. // Get the file from the request file, info, err := ctx.FormFile("uploadfile") if err != nil { ctx.StatusCode(iris.StatusInternalServerError) ctx.HTML("Error while uploading: " + err.Error() + "") return } defer file.Close() fname := info.Filename // Create a file with the same name // assuming that you have a folder named 'uploads' out, err := os.OpenFile("./uploads/"+fname, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { ctx.StatusCode(iris.StatusInternalServerError) ctx.HTML("Error while uploading: " + err.Error() + "") return } defer out.Close() io.Copy(out, file) }) // start the server at http://localhost:8080 app.Run(iris.Addr(":8080")) }