mindoc/controllers/setting.go

196 lines
4.6 KiB
Go

package controllers
import (
"image"
"fmt"
"os"
"strings"
"image/jpeg"
"image/png"
"image/gif"
"path/filepath"
"strconv"
"time"
"io/ioutil"
"bytes"
"github.com/astaxie/beego/logs"
"github.com/lifei6671/godoc/models"
"github.com/lifei6671/godoc/utils"
)
type SettingController struct {
BaseController
}
func (c *SettingController) Index() {
c.TplName = "setting/index.tpl"
if c.Ctx.Input.IsPost() {
email := strings.TrimSpace(c.GetString("email", ""))
phone := strings.TrimSpace(c.GetString("phone"))
description := strings.TrimSpace(c.GetString("description"))
if email == "" {
c.JsonResult(601, "邮箱不能为空")
}
member := c.Member
member.Email = email
member.Phone = phone
member.Description = description
if err := member.Update(); err != nil {
c.JsonResult(602, err.Error())
}
c.JsonResult(0, "ok")
}
}
func (c *SettingController) Password() {
c.TplName = "setting/password.tpl"
if c.Ctx.Input.IsPost() {
password1 := c.GetString("password1")
password2 := c.GetString("password2")
password3 := c.GetString("password3")
if password1 == "" {
c.JsonResult(6003,"原密码不能为空")
}
if password2 == "" {
c.JsonResult(6004,"新密码不能为空")
}
if count := strings.Count(password2,""); count < 6 || count > 18 {
c.JsonResult(6009,"密码必须在6-18字之间")
}
if password2 != password3 {
c.JsonResult(6003,"确认密码不正确")
}
if ok,_ := utils.PasswordVerify(c.Member.Password,password1) ; !ok {
c.JsonResult(6005,"原始密码不正确")
}
if password1 == password2 {
c.JsonResult(6006,"新密码不能和原始密码相同")
}
pwd,err := utils.PasswordHash(password2)
if err != nil {
c.JsonResult(6007,"密码加密失败")
}
c.Member.Password = pwd
if err := c.Member.Update();err != nil {
c.JsonResult(6008,err.Error())
}
c.JsonResult(0,"ok")
}
}
// Upload 上传图片
func (c *SettingController) Upload() {
file,moreFile,err := c.GetFile("image-file")
defer file.Close()
if err != nil {
logs.Error("",err.Error())
c.JsonResult(500,"读取文件异常")
}
ext := filepath.Ext(moreFile.Filename)
if !strings.EqualFold(ext,".png") && !strings.EqualFold(ext,".jpg") && !strings.EqualFold(ext,".gif") && !strings.EqualFold(ext,".jpeg") {
c.JsonResult(500,"不支持的图片格式")
}
x1 ,_ := strconv.ParseFloat(c.GetString("x"),10)
y1 ,_ := strconv.ParseFloat(c.GetString("y"),10)
w1 ,_ := strconv.ParseFloat(c.GetString("width"),10)
h1 ,_ := strconv.ParseFloat(c.GetString("height"),10)
x := int(x1)
y := int(y1)
width := int(w1)
height := int(h1)
fmt.Println(x,x1,y,y1)
fileName := "avatar_" + strconv.FormatInt(int64(time.Now().Nanosecond()), 16)
filePath := "static/uploads/" + time.Now().Format("200601") + "/" + fileName + ext
path := filepath.Dir(filePath)
os.MkdirAll(path, os.ModePerm)
err = c.SaveToFile("image-file",filePath)
if err != nil {
logs.Error("",err)
c.JsonResult(500,"图片保存失败")
}
fileBytes,err := ioutil.ReadFile(filePath)
if err != nil {
logs.Error("",err)
c.JsonResult(500,"图片保存失败")
}
buf := bytes.NewBuffer(fileBytes)
m,_,err := image.Decode(buf)
if err != nil{
logs.Error("image.Decode => ",err)
c.JsonResult(500,"图片解码失败")
}
var subImg image.Image
if rgbImg,ok := m.(*image.YCbCr); ok {
subImg = rgbImg.SubImage(image.Rect(x, y, x+width, y+height)).(*image.YCbCr) //图片裁剪x0 y0 x1 y1
}else if rgbImg,ok := m.(*image.RGBA); ok {
subImg = rgbImg.SubImage(image.Rect(x, y, x+width, y+height)).(*image.YCbCr) //图片裁剪x0 y0 x1 y1
}else if rgbImg,ok := m.(*image.NRGBA); ok {
subImg = rgbImg.SubImage(image.Rect(x, y, x+width, y+height)).(*image.YCbCr) //图片裁剪x0 y0 x1 y1
} else {
fmt.Println(m)
c.JsonResult(500,"图片解码失败")
}
f, err := os.OpenFile("./" + filePath, os.O_SYNC | os.O_RDWR, 0666)
if err != nil{
c.JsonResult(500,"保存图片失败")
}
defer f.Close()
if strings.EqualFold(ext,".jpg") || strings.EqualFold(ext,".jpeg"){
err = jpeg.Encode(f,subImg,&jpeg.Options{ Quality : 100 })
}else if strings.EqualFold(ext,".png") {
err = png.Encode(f,subImg)
}else if strings.EqualFold(ext,".gif") {
err = gif.Encode(f,subImg,&gif.Options{ NumColors : 256})
}
if err != nil {
logs.Error("图片剪切失败 => ",err.Error())
c.JsonResult(500,"图片剪切失败")
}
if err != nil {
logs.Error("保存文件失败 => ",err.Error())
c.JsonResult(500,"保存文件失败")
}
url := "/" + filePath
member := models.NewMember()
if err := member.Find(c.Member.MemberId);err == nil {
member.Avatar = url
member.Update()
c.SetMember(*member)
}
c.JsonResult(0,"ok",url)
}