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. 结果
最终在前端客户就可以得到和后端一模一样的文件了