beego 框架 客户端下载文件

1. 场景

我们在使用beego作为网络框架时,需要给用户提供在前端点击按钮下载对应文件的方式,在这里就简单举一个例子——如何下载文件

 

2. controller中对按钮做出相应

//ExportXml 导出xml文件
func (uc *XmlController) ExportXml() {
	// 获取xml文件 file类型为*os.File   
    // 这里file代码我们需要返回的文件句柄
	file := services.GetXml()

	// 准备相应的返回头
	fileHeader := make([]byte, 512)
	file.Read(fileHeader)
	responsewriter := uc.Ctx.ResponseWriter
    // fileSta 储存file的一些信息指标
	fileSta, _ := file.Stat()

    // 将file的信息写入返回头
    // 设置返回文件的类型,这里http提供自动识别的包
	responsewriter.Header().Set("Content-Type", http.DetectContentType(fileHeader))
    // 设置返回文件的名字
	responsewriter.Header().Set("Content-Disposition", "attachment; filename="+fileSta.Name())
    // 设置返回文件的大小长度
	responsewriter.Header().Set("Content-Length", strconv.FormatInt(fileSta.Size(), 10))


    // Seek设置下一次读/写的位置
	file.Seek(0, 0)
    // 将文件复制进入包返回中
	io.Copy(responsewriter, file)

	response.Error(uc.Ctx)

}

3. 结果

最终在前端客户就可以得到和后端一模一样的文件了

 

 

beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架beego 的架构beego 的整体设计架构如下所示:       beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块,例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 为什么受欢迎的一个原因。大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计 beego 的时候,这些模块就是积木,高级机器人就是 beego。至于这些模块的功能以及如何使用会在后面的文档会逐一介绍。beego 的执行逻辑      既然 beego 是基于这些模块构建的,那么他的执行逻辑是怎么样的呢?beego 是一个典型的 MVC 架构,他的执行逻辑如下图所示:beego 项目结构一般的 beego 项目的目录如下所示:从上面的目录结构我们可以看出来 M(models 目录)、V(views 目录)和 C(controllers 目录)的结构, main.go 是入口文件。你可以通过 bee 工具来新建项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lobster0722

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值