Esempio n. 1
0
// Head 上传头像
func (m *ProfileController) Head() {

	admin := models.Admin{Account: m.userName}
	o := orm.NewOrm()
	if err := o.Read(&admin, "Account"); err != nil {
		m.error(err.Error())
	}

	if m.Ctx.Request.Method == "POST" {
		fmt.Printf("upload head...\n")
		file, handler, err := m.GetFile("head")

		defer file.Close()

		if err != nil {
			m.Data["head_errmsg"] = "上传文件错误: " + err.Error()
		} else {
			if fileSize, ok := file.(Size); ok {
				size := float64(fileSize.Size()) / (1024 * 1024)
				fmt.Printf("filesize = %fMB\n", toolkit.Round(size, 3))

				// if size > 5 {
				// 	m.Data["head_errmsg"] = "上传文件错误: 文件大小超出5M"
				// } else {

				// 能够获取到正确的文件,保存该文件
				fmt.Printf("filename = %s\n", handler.Filename)

				_, fileSuffix := toolkit.SplitFileNameAndSuffix(handler.Filename)
				fileName := toolkit.GenUID() + fileSuffix
				savePath := filepath.Join(beego.AppConfig.String("headpath"), fileName)
				fmt.Printf("filepath = %s\n", savePath)
				// 保存文件时需要相对路径,即 ./static/upload/head/
				err = m.SaveToFile("head", filepath.Join(".", savePath))
				if err != nil {
					m.Data["head_errmsg"] = "上传文件错误: " + err.Error()
				} else {
					admin.Head = fileName
					if num, err := o.Update(&admin, "head"); err == nil {
						if num > 0 {
							m.Data["head_result"] = true
						} else {
							m.Data["head_errmsg"] = "上传文件错误: 服务器保存文件失败"
						}
					} else {
						m.Data["profile_errmsg"] = "上传文件错误: 服务器保存文件失败"
					}
				}
				// }
			} else {
				m.Data["head_errmsg"] = "获取上传文件错误: 无法获取文件大小"
			}
		}
	}

	format := admin.LastTime.Format("2006-01-02 15:04:05")
	m.Data["time"] = format
	m.Data["head"] = beego.AppConfig.String("headpath") + "/" + admin.Head
	m.Data["admin"] = admin
	m.display("profile")
}