1.beego官網
查看上傳 https://gowalker.org/github.com/astaxie/beego
2.找到SaveToFile方法
//SaveToFile saves uploaded file to new path. it only operates the first one of mutil-upload form file field.
func (c *Controller) SaveToFile(fromfile, tofile string) error {
file, _, err := c.Ctx.Request.FormFile(fromfile) if err != nil { return err } defer file.Close() f, err := os.OpenFile(tofile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) if err != nil { return err } defer f.Close() io.Copy(f, file) return nil}
3.查看beego文檔,在請求參數中,有上傳檔案
(1.)form 表單中,新增屬性 enctype=”multipart/form-data” ,擷取請求參數 c.Input().Get(“id”)
(2.)beego提供了兩個方法來處理檔案上傳:
GetFile(key string) (multipart.File, *multipart.FileHeader, error) //該方法主要用於使用者讀取表單中的檔案名稱 the_file,然後返回相應的資訊,使用者根據這些變數來處理檔案上傳:過濾、儲存檔案等
SaveToFile(fromfile, tofile string) error //該方法是在 GetFile 的基礎上實現了快速儲存的功能,fromfile 是提交時候的 html 表單中的 name
(3.) 程式碼範例:
<form enctype="multipart/form-data" method="post">
<input type="file" name="uploadname" />
<input type="submit">
</form>
func (c *FormController) Post() {
f, h, err := c.GetFile("uploadname")
if err != nil {
log.Fatal("getfile err ", err)
}
defer f.Close()
c.SaveToFile("uploadname", "static/upload/" + h.Filename) // 儲存位置在 static/upload, 沒有檔案夾要先建立
}
(4.) 檔案路徑名拼接
path.Join(“path”,fileName) //該函數會根據不同的作業系統,使用不同的路徑分隔字元
(5.)從URL中擷取參數
reqURL := c.ctx.Request.RequestURI //為處理中文 可用 url.QueryUnescape(reqURL)
id := strings.LastIndex(reqURL,”/”)
tid := requrl[i+1:]
4.使用golang原生的上傳:
//SaveToFile saves uploaded file to new path. it only operates the first one of mutil-upload form file field.
func (c *Controller) SaveToFile(fromfile, tofile string) error {
file, _, err := c.Ctx.Request.FormFile(fromfile) if err != nil { return err } defer file.Close() f, err := os.OpenFile(tofile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) if err != nil { return err } defer f.Close() io.Copy(f, file) return nil}