beego 中 上 传 图 片 是 非 常 简 单 的 , 但 是 要 注 意 的 是 form 表 单 中 必 须 加 入 enctype="multipart/form-data"这个属性,否则你的浏览器不会传输你上传的文件。
业务逻辑代码:
Beego 提供了两个很方便的方法来处理文件上传:
• GetFile(key string) (multipart.File, *multipart.FileHeader, error) 该方法主要用于用户读取表单中的文件名 the_file,然后返回相应的信息,用户根据这 些变量来处理文件上传:过滤、保存文件等。
• SaveToFile(fromfile, tofile string) error 该方法是在 GetFile 的基础上实现了快速保存的功能 fromfile 是提交时候的 html 表单中的 name
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Article</title>
</head>
<body>
<h2>上传文章</h2>
<form method="post" action="/upload/file" enctype="multipart/form-data">
标题: <input type="text" name="title" /> <br><br>
内容: <input type="text" name="content" />
<br><br>
文件:<input type="file" name="pic" />
<br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
package controllers
import "github.com/astaxie/beego"
type UploadControllers struct {
beego.Controller
}
func (c *UploadControllers) Get() {
c.TplName = "upload.html"
}
func (c *UploadControllers) DoUpload() {
title := c.GetString("title")
content := c.GetString("content")
beego.Info(title)
beego.Info(content)
// 执行上传文件
f,h,err := c.GetFile("pic")
if err != nil {
beego.Error(err)
c.Ctx.WriteString("上传文件失败")
return
}
c.SaveToFile("pic","static/upload/" + h.Filename) // 目录必须提前创建好
// 关闭文件流
defer f.Close()
c.Ctx.WriteString("上传文件成功")
}