上一篇完成了用戶的登錄注冊(cè)和登錄態(tài)校驗(yàn),這次開始做數(shù)據(jù)上傳的部分,先做文件上傳
文件上傳主要包括文件的上傳存儲(chǔ),數(shù)據(jù)庫(kù)記錄數(shù)據(jù)
model
到文件這塊就變成了典型的restful接口了,就可以使用beego提供的一些腳手架來(lái)快速編寫代碼
bee generate model [modelname] [-fields=""]這個(gè)命令可以創(chuàng)建增刪查改的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)"` 代表著外鍵多對(duì)一
controller
bee generate controller [controllerfile]這個(gè)命令可以創(chuàng)建restful的controller
// @Title Post
// @Description 上傳文件接口
// @Param name formData string true "上傳文件名"
// @Param file formData file true "上傳的文件"
// @Success 200 {int} file的ID
// @Failure 400 用戶錯(cuò)誤
// @Failure 500 服務(wù)端錯(cuò)誤
// @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)
//文件存儲(chǔ)失敗
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))存儲(chǔ)文件
用文件名搜索,沒有搜索到就新建一條記錄,搜索到了就修改記錄的日期
效果

文件上傳