func ArticlesHandler(w http.ResponseWriter, r *http.Request) { logger.Log("console", "request", "["+time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05")+"]["+ r.RemoteAddr+"]["+r.UserAgent()+"]["+r.Host+r.RequestURI+"]") p, err := strconv.Atoi(r.URL.Query().Get("p")) if err != nil { p = 1 } size := 10 offset := (p - 1) * size items, count, err := service.FindArticles(offset, size) if err != nil { http.NotFound(w, r) return } model := make(map[string]interface{}) model["timestamp"] = time.Unix(time.Now().Unix(), 0).Format("20060102150405") model["token"] = utils.GetRandomString(20) model["keywords"] = "" model["description"] = "" model["title"] = "Insert title here" model["items"] = items max, _ := strconv.ParseInt(strconv.Itoa(offset+size), 10, 64) var next int if max < count { next = p + 1 } else { next = p } model["next"] = next var pre int if p > 1 { pre = p - 1 } else { pre = 1 } model["pre"] = pre ExecuteTemplate(w, "articles", model) }
func ArticleByIdHandler(w http.ResponseWriter, r *http.Request, action string) { id, err := strconv.Atoi(action) if err != nil { http.NotFound(w, r) return } item, err := service.FindArticleById(id) if err != nil { http.NotFound(w, r) return } model := make(map[string]interface{}) model["keywords"] = "" + item.Keywords model["description"] = "" + item.Description model["lang"] = "" + item.Lang model["type"] = "" + item.Tag model["timestamp"] = time.Unix(time.Now().Unix(), 0).Format("20060102150405") model["token"] = utils.GetRandomString(20) model["item"] = item model["title"] = item.Title ExecuteTemplate(w, "view", model) }
/* * upload */ func UploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { http.NotFound(w, r) return } if r.Method == "POST" { timestamp := r.URL.Query().Get("timestamp") token := r.URL.Query().Get("token") md := r.URL.Query().Get("md") if "w8ARe4rISz8d3UdjSM9k" != token || "" == timestamp { http.NotFound(w, r) return } if !CheckCookie(w, r, "upload") { http.NotFound(w, r) return } r.ParseForm() r.ParseMultipartForm(32 << 20) multipart := r.MultipartForm if multipart == nil { log.Println("Not MultipartForm.") w.Write(([]byte)("Not MultipartForm.")) return } fileHeaders, findFile := multipart.File["file"] if !findFile || len(fileHeaders) == 0 { log.Println("No file befor uploading.") w.Write(([]byte)("No file befor uploading.")) return } var items []FileItem = make([]FileItem, 0) for _, v := range fileHeaders { fileName := v.Filename fileExt := filepath.Ext(fileName) if checkContentType(fileExt) == false { log.Println("Content type refused.") w.Write(([]byte)("Content type refused.")) return } src, err := v.Open() checkError(err, "Open file error."+fileName) defer src.Close() realPath := uploadDir + conf.PathSeparator + utils.GetRandomString(20) + fileExt output := RootDir + conf.PathSeparator + realPath dst, err := os.OpenFile(output, os.O_WRONLY|os.O_CREATE, 0666) checkError(err, "Open local file error") defer dst.Close() io.Copy(dst, src) var item FileItem item.Path = strings.Replace(realPath, conf.PathSeparator, "/", -1) // if "true" == md { w.Write([]byte(item.Path)) return } // item.OriginName = fileName items = append(items, item) } model := make(map[string]interface{}) model["result"] = items model["size"] = len(fileHeaders) model["stautsCode"] = "200" enc := json.NewEncoder(w) enc.Encode(model) } }