electron

electronjs下载多个图片或文件demo

# 1. 主进程

const { dialog } = require('electron')
const request = require('request')
const https = require('https')
const http = require('http')
const fs = require('fs')
/**
 * 保存文件
 * @param {*}
 */
function saveFileDailog(obj) {
  let names = obj.imageName.join()
  let imageName = obj.imageName
  dialog
    .showSaveDialog({
      title: '保存文件',
      defaultPath: imageName.length > 1 ? 'all' : names,
      showsTagField: false,
      filters: [{ name: 'All', extensions: ['*'] }]
    })
    .then(path => {
      if (path.filePath) {
        console.log(path, 'path')
        let array = obj.imageSrc
        for (let index = 0; index < array.length; index++) {
          console.log(imageName[index], 'imageName[index]')
          let curImg = imageName[index]
          const element = array[index]
          let url = element
          let reg = new RegExp('^(https)://', 'i')
          let match = reg.test(url)
          let requestType = match ? https : http
          let req = requestType.get(url, function (res) {
            let fileData = ''
            res.setEncoding('binary')
            res.on('data', function (chunk) {
              fileData += chunk
            })
            res.on('end', function () {
              let index = url.lastIndexOf('.')
              let suffix = url.substring(index + 1)
              let time = new Date().getTime()

              let curIndex = path.filePath.lastIndexOf('.')

              let lastSuffix = path.filePath.substring(curIndex + 1)

              let extNama = path.filePath
              if (lastSuffix !== suffix) {
                extNama = extNama + '.' + suffix
              }

              console.log(extNama, 'extNama')

              let fileName =
                obj.imageName.length > 1
                  ? path.filePath + time + curImg
                  : extNama
              fs.writeFile(fileName, fileData, 'binary', function (err) {
                return err
                  ? dialog.showErrorBox('提示', '文件下载失败!')
                  : console.log(
                      '[downloadPic]文件   ' + fileName + '  下载成功.'
                    )
              })
            })
            res.on('error', function (err) {
              dialog.showErrorBox('提示', '下载失败!')
            })
          })
          req.on('error', function (err) {
            console.log('获取文件失败' + err)
            dialog.showErrorBox('提示', '获取文件失败!')
          })
        }
      }
    })
}

module.exports = {
  saveFileDailog
}

# 2. 渲染进程

const ipc = require('electron').ipcRenderer

saveBtn() {
      let url = 'http://searchbox.bj.bcebos.com/miniapp/demo-1.0.1.zip'
      // ipc.send("save-dialog",{url:url});
      ipc.send('save-dialog', {
        imageSrc: [
          'http://searchbox.bj.bcebos.com/miniapp/demo-1.0.1.zip',

          'https://demo.dj63.com//2016/CLUB%E5%95%86%E4%B8%9A/club%E4%B8%AD%E6%96%87/20140101/%E9%94%99%E7%88%B1_%E5%BA%84%E5%BF%83%E5%A6%8D_DJ%E5%8D%81%E4%B8%89[2013%E6%B5%81%E8%A1%8C%E8%88%9E%E6%9B%B2].mp3',

          'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa0.att.hudong.com%2F52%2F62%2F31300542679117141195629117826.jpg&refer=http%3A%2F%2Fa0.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617982876&t=9652f3a289a173fdb9b9cb084fabf15f.png',
          'http://www.winrar.com.cn/download/winrar-x64-600scp.exe',
          'https://down.qq.com/qqweb/PCQQ/PCQQ_EXE/PCQQ2021.exe'
          // 'http://ting.xiai123.com/mp3/kewen/wysyy4s/Module01_Unit2.mp3',
        ],
        imageName:['文件1','文件2']  //与imageSrc一一对应
      })
}

# 3. 下载 demo

var express = require('express')
var https = require('https')
var url = require('url')
var fs = require('fs')
const Promise = require('promise')
const request = require('request')
var app = express()

app.get('/', function (req, res, next) {
  var url =
    'https://cdn2.jianshu.io/shakespeare/_next/static/images/note_page_right_sidebar_ad-813d011e1b2d3187d792db1edf5c3dfc.png'

  function downloadMp3(url) {
    var request = require('request')
    var req = request(url, { timeout: 10000, pool: false })
    // req.setMaxListeners(50);
    // req.setHeader('user-agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');

    req.on('error', function (err) {
      throw err
    })
    req.on('response', function (res) {
      res.setEncoding('binary')
      var fileData = ''

      res.on('data', function (chunk) {
        fileData += chunk
      })
      res.on('end', function () {
        var name = url.slice(url.lastIndexOf('/'))
        var fileName = './' + name

        fs.writeFile(fileName, fileData, 'binary', function (err) {
          if (err) {
            console.log('[downloadPic]文件   ' + fileName + '  下载失败.')
            console.log(err)
          } else {
            console.log('文件' + fileName + '下载成功')
          }
        })
      })
    })
  }

  // downloadMp3('http://ting.xiai123.com/mp3/kewen/wysyy4s/Module01_Unit2.mp3');
  // downloadMp3('https://cdn2.jianshu.io/shakespeare/_next/static/images/note_page_right_sidebar_ad-813d011e1b2d3187d792db1edf5c3dfc.png');
  downloadMp3('http://searchbox.bj.bcebos.com/miniapp/demo-1.0.1.zip')

  res.send(url)
})

app.listen(3006)
上次更新: