前端如何实现Excel的上传下载?

news/2024/11/29 6:44:39/

前端实现 Excel 的上传下载一般可以使用两种方式:

一种是借助服务器实现文件的上传和下载

一种是利用 HTML5 提供的 FileReader 和 Blob 对象实现本地文件的读取和下载。

1. 借助服务器实现文件的上传和下载

在此方案中,需要实现客户端将 Excel 文件上传至服务端,然后再由服务端返回 Excel 文件给客户端进行下载。常见的实现方式有:

  • form 表单提交
  • Ajax 实现提交
  • 使用 fetch 实现上传与下载

        下面是一个简单的基于 fetch 的上传和下载实现方法,这里假设后端接口已经能够正确解析接收到的文件并返回相应的结果:

// 上传文件
const uploadFile = async (file) => {const formData = new FormData();formData.append('file', file);try {const response = await fetch('/api/upload', {method: 'POST',body: formData,});const data = await response.json();if (data.success) {console.log('上传成功');} else {console.error('上传失败');}} catch (error) {console.error('上传出错');}
};// 下载文件
const downloadFile = async () => {try {const response = await fetch('/api/download', {method: 'GET',});const blob = await response.blob();const url = window.URL.createObjectURL(blob);const link = document.createElement('a');link.href = url;link.download = 'example.xlsx'; // 下载文件名link.click();window.URL.revokeObjectURL(url);} catch (error) {console.error('下载出错');}
};

2. 利用 HTML5 的File API,它提供的 FileReader 和 Blob 对象实现本地文件的读取和下载

        我们可以利用 HTML5 提供的 FileReader 实现将 Excel 文件读入内存,再使用 Blob 和 URL.createObjectURL 实现文件内容的下载。具体实现如下:

        excel文件上传

<input type="file" id="input-file" accept=".xlsx, .xls">
<button onclick="handleUpload()">Upload</button><script>
function handleUpload() {const fileInput = document.getElementById('input-file');const file = fileInput.files[0];if (!file) {alert('Please select a file!');return;}//new formdata()函数是FormData的构造函数,用来生成一个新的FormData对象const formData = new FormData();formData.append('file', file);// 发送文件到后端进行处理fetch('/upload', {method: 'POST',body: formData}).then(response => {alert('Upload success!');}).catch(error => {console.error(error);alert('Upload failed.');});
}
</script>

         我们获取文件对象,将其添加到FormData对象中,并通过fetch()方法发送POST请求。这样就可以实现文件的上传。

        注意:在上述代码中的 /upload 接口应该由后端进行实现。        

         Excel文件下载

                1.通过fetch调用请求url,并得到response。

                2.使用response.blob()方法将response转化为Blob数据类型。

                3.将Blob数据类型转化为URL对象,用于创建下载链接。

                4.创建<a>元素,设置href属性为URL对象的URL,设置download属性为指定的文件名。

                5.添加<a>元素到页面中,模拟用户点击下载链接,下载文件。

                6.删除<a>元素。

<button onclick="handleDownload()">Download</button><script>
function handleDownload() {// 发送请求获取 Excel 文件流fetch('/download').then(response => {return response.blob();}).then(blob => {// 创建并下载 Excel 文件const url = window.URL.createObjectURL(new Blob([blob]));const link = document.createElement('a');link.href = url;link.download = 'example.xlsx';document.appendChild(link);link.click();document.removeChild(link);}).catch(error => {console.error(error);alert('Download failed.');});
}
</script>

   注意:在上述代码中的 /download 接口同样应该由后端进行实现,且返回的应该是 Excel 文件的二进制流数据。

        关于Blob:Blob是二进制大对象(binary large object)的缩写,它是一种数据库中用于存储大量二进制数据的数据类型。Blob数据类型通常用于存储图像、音频、视频等多媒体文件或者一些大型的文件数据。

        Blob类型的数据可以通过一些特定的编程语言或者工具进行读写操作,通常可以通过二进制流的方式对数据进行读写。在数据库中,Blob类型的数据可以使用INSERT语句插入到表中,使用SELECT语句查询并提取出来。

        需要注意的是,大量的Blob类型数据可能会占用较大的存储空间、处理时间和网络带宽等资源,因此在使用时需要谨慎考虑,尽可能地优化和压缩数据。



http://www.ppmy.cn/news/120166.html

相关文章

平行云X火山引擎:探索XR观展的极致体验

5月20日&#xff0c;素有艺术界“奥林匹克”之称的第18届威尼斯国际建筑双年展&#xff08;以下简称“威尼斯双年展”&#xff09;中国国家馆展览正式开幕。 威尼斯双年展为当今世界规模最大、最具影响力的国际艺术盛事之一&#xff0c;中国文化和旅游部自2005年起主办中国国家…

专利费减备案操作流程——让你申请专利时的官费大大打折

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实…

阿宇摄像机可以不搭配录像机,只买1台摄像机吗?

问&#xff1a;可以不搭配录像机&#xff0c;只买1台摄像机吗&#xff1f; 答&#xff1a;可以的&#xff0c;阿宇部分摄像机支持内置存储卡。如您有单机使用的需求&#xff0c;我们推荐选择阿宇300万警戒小球机。这款产品不仅支持内置存储卡&#xff0c;还支持无线连网。这样…

摄像机的选购

品牌 海康、大华、天地伟业、宇视 清晰度 红外夜视&#xff0c;星光>红外、400W很清晰 协议 onvif协议、h.264\h.265 供电方式 单独供电&#xff08;一根电源线、一根网线&#xff09;&#xff0c;POE&#xff08;一根网线既供电又传输、需要poe交换机&#xff09;&a…

家用监控百科:什么是4K摄像机,4K摄像模组是什么意思

4k摄像机是什么概念呢&#xff1f;今天就由速名网小编带大家一起去了解一下。4K分辨率属于超高清分辨率&#xff0c;在这种分辨率下&#xff0c;拍摄的视频效果就如同看电影一样。画面中的每一个细节&#xff0c;每一个特写都如同亲临现场观看。4K分辨率是指水平方向上每行的像…

摄像机系列

产品名称&#xff1a;彩色枪式摄像机产品型号&#xff1a;AS-2026D主要特点&#xff1a;main characteristic 1.采用1/4 SHARP CCD 2.DSP数字处理... 产品名称&#xff1a;彩色枪式摄像机产品型号&#xff1a;AS-2029主要特点&#xff1a;main characteristic 1.采用SONY 1/3 S…

摄像机镜头详细知识

目录 1、镜头简介 1-1、镜头简介 2、镜头分类 2-1、按结构分类 2-2、按焦距分类 2-3、按接口分类 3、 镜头参数 3-1、 焦距 3-2、 视场角 3-3、 焦距与视场角的关系 3-4、 光圈 3-5、 调制传递函数 3-6、 分辨率 3-7、杂散光 3-8、 鬼影 3-9、畸变 3-10、色散 3-11、景深 3-12、…

Camera 摄像机

Camera类 摄像机 静态属性&#xff1a; main主相机。如果每帧都调用Camera.main&#xff0c;建议定义变量缓存。 public方法&#xff1a; public Ray ScreenPointToRay(Vector3 pos); public Ray ScreenPointToRay(Vector3 pos, Camera.MonoOrStereoscopicEye eye); 描述…