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

系统开发:大文件下载报错问题

问题描述:在个人开发文件上传管理系统时,遇到小文件可以直接下载,遇到大文件只能在刚登陆成功时下载一次,再次下载别的大文件就会报错,具体错误信息是这样:

AxiosError {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…},

解决方式:

前端接收的文件类型:blob类型改为arraybuffer (我的后端返回是MIME类型)

前端代码:

export const downloadFile = (filename) => {
  return api.get(`/files/download/${filename}`, {
    responseType: 'arraybuffer'  // 设置响应类型为 blob,以便处理文件下载
  })
}
    async downloadFile(fileName) {
      try {
        const response = await downloadFile(fileName); // 调用后端下载接口
    
        // 检查响应状态和数据类型
        if (response.status !== 200 || response.data.constructor.name !== 'ArrayBuffer') {
          throw new Error('无法下载文件');
        }
    
        // 将 ArrayBuffer 转换为 Blob
        const blob = new Blob([response.data]);
    
        // 创建一个 URL 用于下载
        const url = window.URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = url;
        link.download = fileName; // 设置下载文件名
    
        // 将 <a> 标签添加到 DOM 中并模拟点击
        document.body.appendChild(link);
        link.click();
    
        // 下载完成后移除 <a> 标签
        link.remove();
    
        // 清理创建的对象 URL
        window.URL.revokeObjectURL(url);
    
      } catch (error) {
        console.error('下载文件时出错:', error);
        throw new Error('下载文件失败,请重试');
      }
    }
  }   

可能原因:

  • responseType: 'arraybuffer' 使浏览器能够接收二进制数据(大文件的原始内容),避免了在处理大文件时由于内存限制导致的 Blob 错误。
  • ArrayBuffer 转换为 Blob 后,浏览器能够识别该数据并正常处理下载操作。

http://www.kler.cn/a/541837.html

相关文章:

  • HalconDotNet 基础操作
  • deepseek+“D-id”或“即梦AI”快速生成短视频
  • LeetCodehot 力扣热题100 验证二叉搜索树
  • 火爆的DeepSeek大模型怎么和智能家居结合?
  • 前端页面添加水印
  • 算法15(力扣347)——前k个高频元素
  • 【自然语言处理】TextRank 算法提取关键词、短语、句(Python源码实现)
  • 【算法-动态规划】、魔法卷轴: 两次清零机会整个数组最大累加和
  • 代发考试战报:2月5号最近考过的思科和华为考试战报
  • 请求响应-请求-日期参数json参数路径参数
  • 【SpringBoot苍穹外卖】debugDay02
  • SpringBoot中为什么要引入消息队列依赖项
  • 防御保护-----前言
  • 用于构建基于大型语言模型(LLM)的开源框架LangChain介绍及代码实践
  • 浅谈TCP的三次握手和四次挥手
  • 关于arm
  • 抽象工厂模式详解(Java)
  • floodfill算法系列一>图像渲染
  • 创新领先!珈和科技获评省级企业技术中心
  • 第五节 采样方法的分类及介绍
  • 蓝桥杯JavaB组之集合框架(ArrayList、HashMap 基础操作)
  • 【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景
  • Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)
  • 喂饭式教程 - 腾讯云轻量服务器部署DeepSeek
  • C++ | Goal 解析器实现
  • 4.Excel:李东阳-电器企业-本年度的生产与营销计划❗(18)