Golang Gin 接口返回 Excel 文件

这篇具有很好参考价值的文章主要介绍了Golang Gin 接口返回 Excel 文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Web 页面导出数据到文件由后台实现还是前端实现?

Web 页面导出表数据到 Excel(或其他格式)可以由前端或后台来实现,具体的实现方式取决于你的应用需求和架构。以下是一些考虑因素:

(1)前端实现。

  • 如果你的数据导出不涉及复杂的数据处理、数据权限控制或数据来源的保护,你可以考虑在前端实现数据导出。

  • 前端实现通常意味着使用JavaScript库或框架来生成Excel文件,例如使用开源库如SheetJS的xlsx.js或者使用浏览器内置的API,如Blob对象和FileSaver.js来生成Excel文件。

  • 前端实现具有即时性,用户可以在浏览器中直接进行数据导出操作,不需要等待后台处理。

(2)后台实现。

  • 如果你需要处理大量数据、进行复杂的数据操作、实施数据权限控制、或者需要从数据库或其他后端数据源提取数据,通常更适合在后台实现。

  • 后台实现可以使用服务器端脚本,如 PHP、Node.js、Python 等,来生成 Excel文件。这可以确保数据的一致性和安全性。

  • 后台实现还可以允许对大型数据集进行分页、筛选、排序等操作,以提供更强大的导出功能。

一种常见的做法是,前端触发数据导出请求,将请求发送到后台,后台处理数据生成Excel文件,然后将生成的Excel文件发送回前端以供用户下载。这种方法结合了前后端的优势,可以提供数据处理和安全性。

2.Golang Excel 库选型

目前开源 Golang Excel 库流行的有两个:

  • excelize

Excelize 是一个功能强大的 Go 语言 Excel 库,你可以使用 Excelize 创建和编辑工作簿、工作表、单元格等内容。

GitHub 仓库:https://github.com/qax-os/excelize

  • xlsx

xlsx 是一个简单的Golang库,用于读写 XLSX 文件。它提供了创建、编辑工作簿、工作表和单元格的功能。

GitHub 仓库:https://github.com/tealeg/xlsx

因为 xlsx 较为轻量,所以下面以 xlsx 为例,给出实现。

3.后台实现示例

在 Web 框架 Gin 中生成 Excel 文件并在接口返回。

func ExportHandler(c *gin.Context) {
    file := xlsx.NewFile()
    sheet, _ := file.AddSheet("InsuranceActive")

    // Add titles.
    titles := []string{
		"Id",
		"CreatedAt",
		"UpdatedAt",
		"CreatorId",
		"UpdaterId",
		"CompanyName",
    }
    row := sheet.AddRow()
    for _, title := range titles {
	cell := row.AddCell()
	cell.Value = title
    }

    // Add rows just like add titles.
    ...

    // Return the excel file.
    c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    filename := fmt.Sprintf("IndustryInfos_%v.xlsx", time.Now().Format("2006-01-02T15:04:05"))
    c.Header("Content-Disposition", "attachment; filename="+filename)
    if err := file.Write(c.Writer); err != nil {
        c.JSON(http.StatusOK, "failed")
        return
    }
    c.JSON(http.StatusOK, "suceess")
}

// 设置路由
engine.GET("/xlsx/export", ExportHandler)

注意回包 Header 的设置:
(1)Content-Type 设为:

"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

关于其他类型文件的 MIME 可以参考:What is a correct MIME type for .docx, .pptx, etc.? - Stack Overflow。

(2)还需要设置 “Content-Disposition” 表示回包是一个附件,并需要指定附件名称。

4.xlsx 库的问题

通过浏览器下载库 tealeg/xlsx 生成的 Excel 文件后,打开时会报下面的错误。

Golang Gin 接口返回 Excel 文件,Gin,导出文件,前端,后台
点击“是”后可正常打开文件,说明文件内容是正确的。

该警告在 v1 就已经出现,且库的作者早已知晓,但目前最新版本 v3 仍未解决该问题。可能因为不影响 Excel 文件内容的正确性,所以拖到现在仍未解决。

详细讨论,请参见 XLSX files produced by this library need repair by Excel. #53。

奇怪地是通过func (*File) Save直接保存至本地的 Excel 文件没有这个问题。

5.小结

综上所述,前端或后台的选择取决于你的具体需求、性能、安全性以及数据处理的复杂性。一些应用可能会同时在前端和后台实现导出功能,以提供更灵活的选项。


参考文献

The tealeg/xlsx Tutorial: Reading and writing xlsx files with Go
What is a correct MIME type for .docx, .pptx, etc.? - Stack Overflow
XLSX files produced by this library need repair by Excel. #53文章来源地址https://www.toymoban.com/news/detail-739565.html

到了这里,关于Golang Gin 接口返回 Excel 文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VUE: 将Json (后台返回的数据-list) 数据转换为Excel文件并实现前端下载

    1. 下载xlsx的包 2. vue中的写法 创建button的按钮,添加点击的函数 写函数 函数流程总体来说就是: 将json字符串书写写入文件,然后转换为blob的对象,之后通过文件流的方式传递给用户下载 其中的 jsonData 可以通过 axios 请求后端传递来的数据。

    2024年02月11日
    浏览(56)
  • VUE通用后台管理系统(四)前端导出文件(CSV、XML、HTML、PDF、EXCEL)

    常见的导出格式:CSV、XML、HTML、PDF、EXCEL 1)准备工作 安装所需相关依赖 前两个是PDF格式需要的依赖,后两个是excel格式所需,如果没有需求这两种格式的可以忽略这一步 然后画页面   页面效果 2)导出CSV格式的文件 新建src/utils/utils.js文件 写入exportCsv方法,columns为表头,

    2024年02月05日
    浏览(59)
  • 【前端下载文件流详解】前端实现多种类型文件(word,excel,pdf,rar,zip等)的下载,接口返回文件流形式(附源码)

    【 写在前面 】其实之前我也写了有关java实现文件的下载,但是当时是局限于excel文档,针对其他类型的并没有介绍,这次刚好有个客户现场反馈回来的,说我们系统确实能下载报告,但是甲方领导要看所有的报告,这不我每天得一个一个的点击下载,然后再打包给他们领导

    2023年04月24日
    浏览(55)
  • 文件下载-后台返回流给前端

    在上面的 Servlet 中,首先需要获取要返回的文件路径,然后检查文件是否存在。如果文件不存在,返回 HttpServletResponse.SC_NOT_FOUND 响应代码;否则,设置 HTTP 响应类型为 application/octet-stream ,并且设置响应头 Content-Disposition 为 attachment ,这样浏览器会自动弹出文件下载对话框。

    2024年02月09日
    浏览(34)
  • 前端导出word文件的多种方式、前端导出excel文件

    先看效果: 这是页面中的table 这是导出后的效果: 需要的依赖: npm 自行安装,需要看官网的具体参数自行去github上面找对应的参数 具体代码:(先看word模板,在看代码,word中的变量和代码中 doc.setData() 是一一对应的) 包依赖: 代码 导出效果: 需要的依赖: node-xlsx 代码

    2024年03月24日
    浏览(100)
  • 后端返回文件流,前端怎么导出、下载

            工作中肯定有很多导出excel、下载文件这种功能。一般都是后端做好,我们去请求对应的接口就行了,前端还需要做一些处理就可以实现导出、下载功能了。具体怎么操作呢,我们来看看!         我们在请求的时候 需要定义responseType【响应类型】为blob类型,如果

    2024年02月12日
    浏览(59)
  • js将后端返回的文件流导出为excel,并自定义下载文件名

    一. 需求 后台管理系统,常会出现导出excel表格功能;点击导出按钮,请求后端接口,需要将接口返回的 文件流 导出为excel,实现前端下载excel文件。 但是,返回的数据获取 response 时出现乱码,如图: 二. 实现思路 调用后端下载接口,获取传递过来的二进制数据流 创建 a 标

    2024年02月05日
    浏览(84)
  • 后端接口返回文件流格式、前端如何实现文件下载导出呢?

    在项目开发过程中,难免会需要实现文件下载功能,记录下自己实际开发过程过程中遇到两种实现的方式。一种:后端直接返回加密url ,前端解密后直接使用 a标签下载就可以,这种方法相等比较简单,另一种:后端接口直接返回文件流,这种方式前端就需要单独封装对应的

    2024年02月16日
    浏览(49)
  • Vue前端表格导出Excel文件

    分享一个Vue前端导出Excel文件的方法。记录学习! 功能需求 :将表格的全部数据导出Excel格式的文件 前端 :Vue3+Element-Plus 这个导出方法全部为前端操作,后端只需要传入表格数据到前端即可(基础的多表查询,用的内连接) 2.1 核心方法 将这个导出方法单独封装出来,带一

    2023年04月24日
    浏览(91)
  • 后端返回文件流,前端怎么导出、下载(8种方法可实现)

    在前端导出和下载后端返回的文件流时,可以使用以下几种方法: 使用 window.open() 方法: 在前端使用 window.open() 方法打开一个新的窗口或标签页,并将后端返回的文件流作为URL传递给该方法。浏览器会自动下载该文件。 例如: window.open(\\\'http://example.com/download\\\', \\\'_blank\\\'); 使用

    2024年02月11日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包