【axios】axios下载二进制excel文件如何做到中断续传

使用 Axios 来下载二进制 Excel 文件并实现中断和续传。以下是一种基本的实现方法:

1、在开始下载之前,确保您的项目中已经使用了 Axios(可以通过使用 npm 或者 yarn 进行安装)。

2、创建一个用于下载的函数,并使用 axios.get() 来发起文件下载请求。如下所示:

javascript 复制代码
const axios = require('axios');
const fs = require('fs');

// 下载函数
async function downloadExcelFile(url, outputPath, headers = {}) {
  const writer = fs.createWriteStream(outputPath, { flags: 'a' });
  
  const response = await axios.get(url, {
    responseType: 'stream',
    headers,
  });

  response.data.pipe(writer);

  // 返回一个 Promise,以便在外部处理下载过程
  return new Promise((resolve, reject) => {
    writer.on('finish', resolve);
    writer.on('error', reject);
  });
}

// 调用下载函数
downloadExcelFile('http://example.com/excel-file.xls', 'output.xls')
  .then(() => {
    console.log('文件下载完成');
  })
  .catch((error) => {
    console.error('文件下载失败', error);
  });

3、在现有的下载函数中添加中断和续传的支持,可以使用 range 请求头来控制请求的块位置。修改下载函数如下:

javascript 复制代码
const axios = require('axios');
const fs = require('fs');

// 下载函数
async function downloadExcelFile(url, outputPath, headers = {}) {
  let startByte = 0;

  if (fs.existsSync(outputPath)) {
    // 如果已经存在输出文件,则获取已下载的文件大小
    const stats = fs.statSync(outputPath);
    startByte = stats.size;

    // 通过设置 Range 请求头来指定从哪个位置继续下载
    headers['Range'] = `bytes=${startByte}-`;
  }

  const writer = fs.createWriteStream(outputPath, { flags: 'a' });

  const response = await axios.get(url, {
    responseType: 'stream',
    headers,
  });

  response.data.pipe(writer);

  // 返回一个 Promise,以便在外部处理下载过程
  return new Promise((resolve, reject) => {
    writer.on('finish', resolve);
    writer.on('error', reject);
  });
}

// 调用下载函数
downloadExcelFile('http://example.com/excel-file.xls', 'output.xls')
  .then(() => {
    console.log('文件下载完成');
  })
  .catch((error) => {
    console.error('文件下载失败', error);
  });

通过以上修改,下载函数将会检查是否已存在输出文件。如果存在,则使用 Range 请求头指定从已下载的文件大小开始继续下载,实现了中断和续传的功能。

请注意,服务器必须支持并正确处理 Range 请求头,同时确保文件内容正确的传输和续传。确保服务器端已正确设置了响应头信息。前端的断点续传实际上是基于服务器端的支持和协议的。

相关推荐
The Future is mine11 小时前
Excel如何只允许对部分表格内容进行修改
excel
2601_9620994612 小时前
Python xlwt设置excel单元格字体及格式
python·excel·xlwt·样式设置·单元格格式
葡萄城技术团队21 小时前
不会写 SUMIFS 也能做汇总?用 SpreadJS AI 生成并解释 Excel 公式
人工智能·excel
2501_933670791 天前
采购运营校招Excel能力清单:函数、透视表、ERP数据与SQL入门
数据库·sql·excel
netho02 天前
影刀RPA初级证书+ Excel 全自动数据看板
excel·rpa
2501_930707782 天前
使用C#代码设置 Excel 单元格的背景颜色和图案
excel
ms365copilot2 天前
Excel Copilot聊天历史|关闭文件后,还能找回之前的AI分析对话
人工智能·excel·copilot
SL-staff2 天前
规则引擎如何实现风控报告的自动化?JVS-Rules提供解决方案
大数据·自动化·excel·规则引擎·jvs-rules·风控报告·数据溯源
2501_933670792 天前
内容电商运营岗位能力模型:SQL、Excel、投放数据与AI工具怎么准备
人工智能·sql·excel
AIGS0012 天前
工艺参数散在Excel和纸质文件里,能不能统一管、随查随用
服务器·数据库·excel·经验沉淀·知识管理·工艺知识·本体语义