Beego-上傳文件

1.上傳文件

1.beego官網

查看上傳 https://gowalker.org/github.com/astaxie/beego html

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」)git

(2.)beego提供了兩個方法來處理文件上傳:github

GetFile(key string) (multipart.File, *multipart.FileHeader, error)  //該方法主要用於用戶讀取表單中的文件名 the_file,而後返回相應的信息,用戶根據這些變量來處理文件上傳:過濾、保存文件等golang

SaveToFile(fromfile, tofile string) error  //該方法是在 GetFile 的基礎上實現了快速保存的功能,fromfile 是提交時候的 html 表單中的 name函數

(3.) 代碼示例:post

<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.) 文件路徑名拼接url

path.Join(「path」,fileName)  //該函數會根據不一樣的操做系統,使用不一樣的路徑分隔符

(5.)從URL中獲取參數spa

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
}
相關文章
相關標籤/搜索