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

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

项目场景:

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

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


问题描述

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

通过 axios模块进行下载,但报了
The provided value ‘stream’ is not a valid enum value of type XMLHttpRequestResponseType.

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

原因分析:

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

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

解决方案:

本来node.js是通过

webPreferences: {
      allowRunningInsecureContent: true,
      webSecurity: false,
      preload: path.join(__dirname, "preload.js"),
},

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

把微服务部署位置放在

app.whenReady().then(() => {
    startHttpServe()
    createWindow();

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

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


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

相关文章:

  • Jenkinsdebug:遇到ERROR: unable to select packages:怎么处理
  • 中期检查表
  • C++基础知识学习记录—运算符重载
  • 【Golang 面试题】每日 3 题(五十八)
  • ubuntu平台下vim自动插件管理
  • [AI相关]Unity的C#代码如何简写
  • 构建高效智能对话前端:基于Ant Design X 的deepseek对话应用
  • Kafka的生产者和消费者模型
  • Go 语言函数返回对象 vs 传递指针赋值:性能对比与最佳实践
  • C#上位机--结构
  • Redis(高阶篇)03章——缓存双写一致性之更新策略探讨
  • 在华为云部署应用,通过阿里云代理调用第三方接口的利弊与解决方案
  • 机器学习(李宏毅)——RNN
  • 搭建一个 Spring Boot 项目,解决jdk与springboot版本不匹配
  • vue3中reactive的对象清空,所引发的问题:清空不了和清空之后再去赋值就赋值不了为什么
  • 年前集训总结python
  • 玩客云 IP查找
  • Gateway中的Filter机制
  • 解锁养生秘籍,拥抱健康生活
  • 【Scrapy】Scrapy教程6——提取数据