当前位置: 首页 > news >正文

Golang Gin 接口返回 Excel 文件

文章目录

  • 1.Web 页面导出数据到文件由后台实现还是前端实现?
  • 2.Golang Excel 库选型
  • 3.后台实现示例
  • 4.xlsx 库的问题
  • 5.小结
  • 参考文献

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

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

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

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

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

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

  • 后台实现可以使用服务器端脚本,如 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 文件后,打开时会报下面的错误。

在这里插入图片描述
点击“是”后可正常打开文件,说明文件内容是正确的。

该警告在 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

相关文章:

Golang Gin 接口返回 Excel 文件

文章目录 1.Web 页面导出数据到文件由后台实现还是前端实现?2.Golang Excel 库选型3.后台实现示例4.xlsx 库的问题5.小结参考文献 1.Web 页面导出数据到文件由后台实现还是前端实现? Web 页面导出表数据到 Excel(或其他格式)可以…...

实战之巧用header头

案例: 遇到过三次 一次是更改accept,获取到tomcat的绝对路径,结合其他漏洞获取到shell。 一次是更改accept,越权获取到管理员的MD5加密,最后接管超管权限。 一次是更改accept,结合参数获取到key。 这里以越…...

[AUTOSAR][诊断管理][ECU][$36] 数据传输

文章目录 一、简介二、服务请求报文定义三、服务请求报文中参数定义(1)blockSequenceCounter(2)transferRequestParameterRecord三、肯定响应(1)blockSequenceCounter(2)transferResponseParameterRecord四、支持的NRC五、示例代码36_transfer_data.c一、简介 这个服务…...

sw 怎么装新版本

我们在安装solidworks时,有时候会提示A newer version of this applic ation is already installed. Installation stopped.如下图所示 这时候需要点继续安装 然后会出现下图所示情况,vba7.1安装未成功 这是因为我们电脑中以前安装过更高版本的solidw…...

正点原子嵌入式linux驱动开发——Linux 音频驱动

音频是最常用到的功能,音频也是linux和安卓的重点应用场合。STM32MP1带有SAI接口,正点原子的STM32MP1开发板通过此接口外接了一个CS42L51音频DAC芯片,本章就来学习一下如何使能CS42L51驱动,并且CS42L51通过芯片来完成音乐播放与录…...

conda相关的命令操作

准备切换conda环境 cd C:\ProgramData\Anaconda3\Scripts查看所有环境 conda info --envs选择环境 activate pytorch安装torch pip install D:\installPackage\torch-1.2.0-cp36-cp36m-win_amd64.whl安装torchvision pip install D:\installPackage\torchvision-0.4.0-cp3…...

如何快速使用Vue3在electron项目开发chrome Devtools插件

1、建立Vue项目 为了方便快速建立项目,我已经写好脚手架,直接clone项目,快速开发 点击快速进入源代码 拉取代码 git clone https://github.com/xygengcn/electron-devtool.git安装依赖 yarn运行项目 yarn dev打包项目 yarn build2、安装…...

干洗店服务预约小程序有什么作用

要说干洗店,近些年的需求度非常高,一方面是人们生活品质提升,另一方面则是各种服饰对洗涤要求提升等,很多人的衣服很多也会通过干洗店进行清洁。 而对从业商家来说,市场庞大一方面需要不断进行市场教育、品牌提升&…...

【跟小嘉学 Rust 编程】三十四、Rust的Web开发框架之一: Actix-Web的进阶

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

软件安装(1)——Xshell安装

一、前言 本篇文章主要用于介绍Xshell破解版的安装 二、具体步骤 1. 下载Xshell7 链接:https://pan.baidu.com/s/1sFZz1uPb7yeDl6dlM4xtpg 提取码:a7m8 2. 安装Xshell7 选择文件安装目录后安装即可...

Kafka基本原理、生产问题总结及性能优化实践 | 京东云技术团队

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&a…...

java8利用Stream方法求两个List对象的交集、差集与并集(即:anyMatch和allMatch和noneMatch的区别详解)

1、anyMatch 判断数据列表中是否存在任意一个元素符合设置的predicate条件&#xff0c;如果是就返回true&#xff0c;否则返回false。 接口定义&#xff1a; boolean anyMatch(Predicate<? super T> predicate); 方法描述&#xff1a; 在anyMatch 接口定义中是接收 P…...

Centos7下生成https自签名证书

1、安装openssl yum install openssl2、生成带密码的私有秘钥文件 openssl genrsa -des3 -out server.key 2048使用带密码的私有秘钥文件时需要输入密码&#xff0c;这里直接输入&#xff1a;123456 3、生成不带密码的私有秘钥文件 openssl rsa -in server.key -out serve…...

从中序和后序遍历序列构造二叉树

注意&#xff1a;该解法是基于二叉树中的值不存在重复所写的。 代码如下&#xff0c;可开袋即食 class Solution {private Map<Integer,Integer> map;public TreeNode buildTree(int[] inorder, int[] postorder) {map new HashMap<>();for(int i 0; i < in…...

Apache ActiveMQ (版本 < 5.18.3) (CNVD-2023-69477)RCE修复方案/缓解方案

一、漏洞描述 Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;基金会的一套开源的消息中间件&#xff0c;它支持 Java 消息服务、集群、Spring Framework 等。 二、漏洞成因 ActiveMQ 默认开放了 61616 端口用于接收 OpenWire 协议消息&#xff0c;由于针对异常…...

61. 旋转链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;李歘歘的博客 &#x1f3c6; &#x1f33a;每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点&#xff0c;以及职场小菜鸡的生活。&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&am…...

基于tpshop开发多商户源码支持手机端+商家+门店 +分销+淘宝数据导入+APP+可视化编辑

tpshop多商户源码,tpshop商城源码,tpshop b2b2c源码-支持手机端商家门店 分销淘宝数据导入APP可视化编辑 tpshop商城源码算是 thinkphp框架里做的比较早 比较好的源码了&#xff0c;写法简明 友好面向程序猿。 这是一款前几年的版本 虽然后台看着好了些&#xff0c;丝毫不影响…...

ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑

ElasticSearch深度解析入门篇&#xff1a;高效搜索解决方案的介绍与实战案例讲解&#xff0c;带你避坑 1.Elasticsearch 产生背景 大规模数据如何检索 如&#xff1a;当系统数据量上了 10 亿、100 亿条的时候&#xff0c;我们在做系统架构的时候通常会从以下角度去考虑问题&a…...

HTML简单实现v-if与v-for与v-model

Vue启动&#xff01;&#xff01; 首先VIewModel将View和Model连接一起&#xff0c;Model的数据改变View的数据也变 使用Visual Studio Code 启动Vue需要vue.js插件和导入CDN(包) vue.js插件&#xff1a;CTRL shift x 在搜索栏搜 索vue.js安装即可 CDN&#xff1a; http…...

【学习笔记】[PA2021] Fiolki 2

Part 1 前置知识&#xff1a;LGV引理 摘抄自oi-wiki&#xff1a; L G V LGV LGV引理可以用来处理有向无环图上不相交路径计数等问题。 基本定义&#xff1a; w ( P ) w(P) w(P)表示 P P P这条路径上所有边的 边权之积 。&#xff08;路径计数时&#xff0c;可以将边权都设为…...

5.3 Spring Boot整合JPA

本文详细介绍了如何在Spring Boot项目中整合Spring JPA&#xff0c;实现对数据库的高效操作。首先&#xff0c;创建Spring Boot项目并添加必要的依赖&#xff0c;如Druid数据源。接着&#xff0c;配置数据源属性&#xff0c;创建实体类Comment和Article&#xff0c;并使用JPA注…...

Cell-o1:强化学习训练LLM解决单细胞推理问题

细胞类型注释是分析scRNA-seq数据异质性的关键任务。尽管最近的基础模型实现了这一过程的自动化&#xff0c;但它们通常独立注释细胞&#xff0c;未考虑批次水平的细胞背景或提供解释性推理。相比之下&#xff0c;人类专家常基于领域知识为不同细胞簇注释不同的细胞类型。为模拟…...

模拟法解题的思路与算法分享

我们先来看思路与算法&#xff1a; 使用变长数组对栈进行模拟。 如果操作是 &#xff0c;那么访问数组的后两个得分&#xff0c;将两个得分之和加到总得分&#xff0c;并且将两个得分之和入栈。如果操作是 D&#xff0c;那么访问数组的最后一个得分&#xff0c;将得分乘以 2 …...

人工智能赋能高中学科教学的应用与前景研究

一、引言 1.1 研究背景 在科技飞速发展的当下&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称 AI&#xff09;已成为全球瞩目的关键技术领域&#xff0c;深刻地改变着人们的生活、工作和学习方式。从智能家居设备到智能交通系统&#xff0c;从医疗…...

针对“仅某个地区出现Bug”的原因分析与解决方案

一、核心排查方向&#xff08;按优先级排序&#xff09; 地区相关配置差异 检查点&#xff1a; 该地区是否有独立的配置文件或数据库分片&#xff1f;是否启用了地区特定的功能开关&#xff08;Feature Flag&#xff09;或AB测试&#xff1f;本地化内容&#xff08;如语言、时…...

如何在mac上安装podman

安装 Podman 在 macOS 上 在 macOS 上安装 Podman 需要使用 Podman 的桌面客户端工具 Podman Desktop 或通过 Homebrew 安装命令行工具。 使用 Homebrew 安装 Podman&#xff1a; (base) ninjamacninjamacdeMacBook-Air shell % brew install podman > Auto-updating Hom…...

如何区分 “通信网络安全防护” 与 “信息安全” 的考核重点?

“通信网络安全防护” 与 “信息安全” 的考核重点可以从以下几个方面进行区分&#xff1a; 保护对象 通信网络安全防护&#xff1a;重点关注通信网络系统本身&#xff0c;包括网络基础设施&#xff0c;如路由器、交换机、基站等&#xff0c;以及网络通信链路和相关设备。同…...

用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战

用HTML5 Canvas打造交互式心形粒子动画&#xff1a;从基础到优化实战 引言 在Web交互设计中&#xff0c;粒子动画因其动态美感和视觉吸引力被广泛应用于节日特效、情感化界面等场景。本文将通过实战案例&#xff0c;详细讲解如何使用HTML5 Canvas和JavaScript实现一个「心之律…...

【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 引言Redisson基本信息Redisson网站 Redisson应用…...

Java方法引用深度解析:从匿名内部类到函数式编程的演进

文章目录 前言问题场景第一种&#xff1a;传统的匿名内部类技术解析优缺点分析 第二种&#xff1a;Lambda表达式的革命技术解析Lambda表达式的本质性能优势 第三种&#xff1a;方法引用的极致简洁技术解析 方法引用的四种类型1. 静态方法引用2. 实例方法引用3. 特定类型的任意对…...