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

文章介绍了前端实现Excel文件上传和下载的两种常见方法:一是借助服务器,通过Ajax或fetch进行文件交互;二是利用HTML5的FileReader和Blob对象实现本地文件读取和下载。这两种方式都需要与后端接口配合,处理文件的上传和下载请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端实现 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类型数据可能会占用较大的存储空间、处理时间和网络带宽等资源,因此在使用时需要谨慎考虑,尽可能地优化和压缩数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小可乐吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值