beego框架 文件上传下载

本章主要介绍 beego 如何处理文件的上传和下载。

1. beego处理文件上传

Beego 控制器提供了两个很方便的函数来处理文件上传:

  • GetFile(key string) (multipart.File, *multipart.FileHeader, error)主要用于读取表单中的文件信息,可以根据这些信息来处理文件上传、过滤、保存文件等。
  • SaveToFile(fromfile, tofile string) error这个函数就是用于实现快速保存文件到本地路径

范例:

表单

<form enctype="multipart/form-data" method="post">
    <input type="file" name="filename" />
    <input type="submit">
</form>
提示:文件上传,表单<form>记得加上enctype="multipart/form-data"属性,否则浏览器不会上传文件。

处理文件上传代码:

func (this *UserController) Post() {
    // 读取文件信息
    f, h, err := this.GetFile("filename")
    
    if err != nil {
        log.Fatal("读取文件错误", err)
    }
    
    // 延迟关闭文件
    defer f.Close()
    
    // 保存文件, 本地文件路径static/upload/上传文件名
    // 需要提前创建好static/upload目录
    this.SaveToFile("filename", "static/upload/" + h.Filename)
}

如果你不想将文件保存到本地路径,想直接读取文件内容进行处理。

func (this *UserController) Post() {
    // 读取文件信息
    f, h, err := this.GetFile("filename")
    
    if err != nil {
        log.Fatal("读取文件错误", err)
    }
    
    // 延迟关闭文件
    defer f.Close()
    
    // 读取上传文件内容, data就是文件的内容
    // ioutil.ReadAll返回[]byte类型数据
    data, err := ioutil.ReadAll(f)
}

2. beego 处理文件下载

如果你想实现动态处理文件下载,例如:在文件下载的时候验证下用户的权限,这种情况就不能直接返回一个静态地址给用户。

范例:

func (this *FileController) Get() {
    // 业务逻辑处理,例如先检测用户权限

    // 下载服务器上当前目录/data/file.zip文件, 下载后的文件名为:压缩包1.zip
    this.Ctx.Output.Download("data/file.zip", "压缩包1.zip")
}

下一章:beego框架 项目部署

beego框架 项目部署与热更新:1. beego 项目部署:一般服务器都是linux,这里主要介绍linux系统的项目部署。项目打包:bee pack 打包完成后当前目录得到一个tar.gz后缀的压缩包。2. beego 热更新:热更新指的是在不中断服务的情况下,完成程序升级。beego 项目默认已经实现了热更新。