为什吗是beego
首先此框架是一个简单稳定的框架,使用的也比较广泛了,有一些比较简单的项目如博客及其他一些简单的项目完全可以使用此框架进行开发
beego 是一个典型的 MVC 架构,它的执行逻辑如下图所示:
controller层的写法
如下一下就是上传图片的业务逻辑
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"os"
)
type ImageUploadController struct {
beego.Controller
}
// 文章更新 数据校验 路由 /api/article/update
func (this *ImageUploadController) ImageUpload() {
// 获取文件信息
file, information, err := this.GetFile("editormd-image-file")
if err != nil {
beego.Info(err)
}
file.Close()
// 文件名
fileName := information.Filename
fmt.Println("上传图片名称", fileName)
// 日期字符串
//dateStr := beego.Date(time.Now(), "Ymd")
// 创建文件夹
filePath := "./static/uploads/" //+ dateStr
if err1 := os.MkdirAll(filePath, 0777); err1 != nil { // 创建数据库目录
panic("failed" + err.Error())
}
// folderPath := p.CreateDateDir("/static/uploads/")
// 移动文件到创建好的文件夹内
err2 := this.SaveToFile("editormd-image-file", filePath+"/"+fileName)
if err2 == nil { // 如果没错,返回url,success,message
this.Data["json"] = map[string]interface{}{
"url": "/static/uploads/" + "/" + fileName,
"success": 1,
"message": "upload success!",
}
this.ServeJSON()
}
}
在写一个返回模版的方法
//首页
func (this *FrontendController) Index() {
page, _ := this.GetInt64("page")
pageSize := tools.StringToInt64(models.GetOneConfig("PageSize"))
if page < 1 {
page = 1
}
list, count := models.LimitArticleDisplay(page, pageSize)
this.Data["paging"] = tools.CreatePaging(page, pageSize, count)
this.Data["list"] = list
this.Data["config"] = models.ConfigList()
this.Data["page"] = page
this.Layout = layout
this.TplName = theme + "/index.html"
}
上面的this.TplName就是我们在view包地下的路径,按此进行请求则可以看到制定的页面
注册,controller写完之后需要注册一下,在routers包下面
package routers
import (
"GoMD/controllers"
"github.com/astaxie/beego"
)
func init() {
//更新图片
beego.Router("/uploadfile", &controllers.ImageUploadController{}, "post:ImageUpload")
}
通过上面内容,更新图片的方法就会被注册了,此方法才可以正常被使用
按上诉步骤则可以实现一个请求了