package CaptchaController import ( "bytes" "fmt" "github.com/dchest/captcha" "log" "net/http" "time" ) func Serve(w http.ResponseWriter, r *http.Request, id string, width, height int) error { w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Pragma", "no-cache") w.Header().Set("Expires", "0") var content bytes.Buffer w.Header().Set("Content-Type", "image/png") //设置到Redis captcha.SetCustomStore(&RedisStoreBean) captcha.WriteImage(&content, id, width, height) if content.Bytes()==nil{ return captcha.ErrNotFound }else { http.ServeContent(w, r, id+".png", time.Time{}, bytes.NewReader(content.Bytes())) return nil } } func ServeHTTP(w http.ResponseWriter, r *http.Request){ //GET方式传参 keys, ok := r.URL.Query()["captchaId"] if !ok || len(keys) < 1 { log.Println("Url Param 'key' is missing") return } id := keys[0] fmt.Println("reload : " + r.FormValue("reload")) if r.FormValue("reload") != "" { captcha.Reload(id) } if Serve(w, r, id, captcha.StdWidth, captcha.StdHeight) == captcha.ErrNotFound { http.NotFound(w, r) } }