记electron-vue批量下载文件

写在前面:此处的需求是要在第一次进来后将资源(图片,视频,doc及pdf)下载到本地,而后的加载通过本地读取,避免因网络问题造成页面加载失败

方法网上基本都有,仅是记录一下自己踩过的坑

方法一(可用于单个文件下载)

在进程文件中调取electron本身的api下载

ipcMain.on('downloadFileToFolder', (e, arg) => {
  // 设置保存路径 
  // 三个参数 1:你要保存的目录路径;2:该目录下的文件夹名称;3:名称+后缀名
  const filePath = path.join(getStore.get("pathUrl_12309"), arg.path, `${arg.fileName}.${arg.fileType}`);

  mainWindow.webContents.downloadURL(arg.url);
  mainWindow.webContents.session.once('will-download', (event, item, webContents) => {
    item.setSavePath(filePath);
    console.log(filePath + " 文件保存路径");
    // 监听done事件 文件下载完成
    item.once('done', (event, state) => {
      console.log(state, 'state====')
      if (state === 'completed') {
        // e.sender.send('downloadTrue', "yes")
        webContents.send('sendDownLoadMsg', arg.fileName)
        // shell.openPath(filePath) //打开文件
      }
    })
  }) 

})

其他页面调取

import { ipcRenderer } from "electron";


 ipcRenderer.send("downloadFileToFolder", {
          url: item.serverUrl,
          fileName: name,
          path: "/" + item.parentModuleId,
          fileType: type
 });

期间遇到的问题: 因为是多个资源所以进行了循环下载去调取,会造成上一个文件没下载好,后一个文件又去请求调用页面则会反复弹出文件管理器,需要用户手动点击选择路径,操作十分不好。

解决方法(仅供参考):

  1. 通过时间函数,设定4-8秒的时间下载再调取下一个。
    问题:不适用于大文件

2.在done事件完成后发送消息给进程,函数读取到后再进去下载
问题:因为是数组所有进行了下标+1去调用,此方法无法同步操作,可自行进行整改

方法二(使用request库)

首先下载request库,可直接在页面中调用

npm i request

在调用的页面中引入

var request = require("request");

——————————————
const filePath = path.join( 
		store.get("pathUrl_12309"),  
	    "/" + item.parentModuleId, 
	    `${name}.${type}`
 );
 var req = request({
          method: "GET",
          url: encodeURI(item.serverUrl)  // encodeURI:链接包含中文
  });
  var out = fs.createWriteStream(filePath); //创建文件写入
  req.pipe(out);
  req.on("response", data => {
        console.log(data, "data==="); 
  });
  //接收到文件流事件
   req.on("data", chunk => {  });
   //文件接收结束
   req.on("end", () => { 
          this.loadIndex++;
          if (this.loadIndex == this.downLoadFiles.length) {
            console.log("进入停止函数");
            // 下载完毕重新进入判断函数,去获取文件夹下内容
            that.getFolderData();
          } else {
            // this.sleep(2000);
            // 重新进入此函数下载文件
            this.saveFiles(this.downLoadFiles);
          }
   });

over

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值