electron 本地文件管理系统关于下载的一个关键点

项目场景:

提示:这里简述项目相关背景:

前提是下载一个很大 几个G甚至几十个G的文件 设想是在nodejs里负责创建文件夹和下载


问题描述

提示:这里描述项目中遇到的问题:

通过 axios模块进行下载,但报了

The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType.

c 复制代码
		const response = await axios({
            url: file_url,
            method: 'GET',
            timeout: 0,
            responseType: 'stream'
        });

原因分析:

提示:这里填写问题的分析:

超时 不管怎样都捕捉不到错误 下载进度也获取不到 只能捕获超时的错误 因为文件过大 还不能设置超时 所以等于完全无反应的,所以就先从请求头入手 调试发现跟请求头无关 试了一堆一堆的方式 掠过 直接说解决方案

解决方案:

本来node.js是通过

typescript 复制代码
webPreferences: {
      allowRunningInsecureContent: true,
      webSecurity: false,
      preload: path.join(__dirname, "preload.js"),
},

主入口文件里加载preload.js 脚本主要用于在渲染进程和主进程之间建立安全的通信桥梁,它的运行环境比较特殊,更接近浏览器环境,这就可能导致 axios 基于 XMLHttpRequest 来处理请求,从而出现不支持 'stream' 响应类型的错误。

把微服务部署位置放在

typescript 复制代码
app.whenReady().then(() => {
    startHttpServe()
    createWindow();

    app.on("activate", () => {
      if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
  });

就好了
app.whenReady() 是在 Electron 主进程里执行的,主进程本质上就是一个 Node.js 进程,在这个环境下 axios 基于 http 和 https 模块实现,能够很好地支持 'stream' 响应类型,所以把代码放到这里执行就没问题了。

相关推荐
0思必得02 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5162 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino2 小时前
图片、文件的预览
前端·javascript
2501_920931704 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos
layman05284 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔4 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李4 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN4 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒4 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库4 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css