上一篇完成了用户的登录注册和登录态校验,这次开始做数据上传的部分,先做文件上传
文件上传主要包括文件的上传存储,数据库记录数据
model
到文件这块就变成了典型的restful接口了,就可以使用beego提供的一些脚手架来快速编写代码
bee generate model [modelname] [-fields=""]
这个命令可以创建增删查改的model
type File struct {
Id int64
Name string
Time time.Time `orm:"type(datetime)"`
User *User `orm:"rel(fk)"`
}
func init() {
orm.RegisterModel(new(File))
}
Time time.Time `orm:"type(datetime)"`
代表着datetime类型
User *User `orm:"rel(fk)"`
代表着外键多对一
controller
bee generate controller [controllerfile]
这个命令可以创建restful的controller
// @Title Post
// @Description 上传文件接口
// @Param name formData string true "上传文件名"
// @Param file formData file true "上传的文件"
// @Success 200 {int} file的ID
// @Failure 400 用户错误
// @Failure 500 服务端错误
// @router / [post]
func (c *FileController) Post() {
name := c.GetString("name")
f, _, err := c.GetFile("file")
defer f.Close()
//获取文件失败
if err != nil {
c.Data["json"] = "获取文件失败"
c.Abort("400")
}
uid := c.GetSession("uid").(int64)
//文件存储失败
if err = c.SaveToFile("file", fmt.Sprintf("upload/%d_%s", uid, name)); err != nil {
c.Data["json"] = err.Error()
c.Abort("500")
}
o := orm.NewOrm()
user := models.User{Id: uid}
file := models.File{Name: name, User: &user}
if o.Read(&file, "Name", "User") == nil {
file.Time = time.Now()
_, err := o.Update(&file, "Time")
if err != nil {
c.Data["json"] = err.Error()
c.Abort("500")
}
c.Data["json"] = file.Id
} else {
file.Time = time.Now()
_, err := o.Insert(&file)
if err != nil {
c.Data["json"] = err.Error()
c.Abort("500")
}
c.Data["json"] = file.Id
}
c.ServeJSON()
}
c.SaveToFile("file", fmt.Sprintf("upload/%d_%s", uid, name))
存储文件
用文件名搜索,没有搜索到就新建一条记录,搜索到了就修改记录的日期