Last active
December 28, 2021 13:07
-
-
Save Meowu/a8840c46e1e33604ccf2fb1436afa800 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| let map = {}; //定义一个map对象,用来存放每一ms的数据量, key: 毫秒 value: 字节数,示例: 1578648506560: 50 | |
| let map_max_key = 0;// 当前map中最大的key | |
| const change = async (i, value) => { | |
| map[i] = value; | |
| map_max_key = i | |
| }; | |
| /** | |
| * 上传文件至阿里云 | |
| * @param _objName | |
| * @param _file | |
| * @returns 0-成功 1-失败 2-取消 | |
| */ | |
| async function uploadFile(_objName, _file) { | |
| let logFlag = false;//是否进行日志记录的标记位 | |
| //main.log,main.old.log,task.log这3个文件本身就是 | |
| if (_file.indexOf('main.log') === -1 && _file.indexOf('main.old.log') === -1 && _file.indexOf('task.log') === -1) { | |
| logFlag = true; | |
| } | |
| /** | |
| * 处理分片上传的参数 | |
| * @param res 上传的返回信息 | |
| * @param partSize 分片的大小 | |
| */ | |
| function handle_network_speed(res, partSize) { | |
| const spend_time = res.rt;//单位ms | |
| const end_time = new Date(res.headers.date).getTime(); | |
| const start_time = end_time - spend_time; | |
| let network_speed = parseInt(partSize / spend_time); // 每ms中上传的字节(b)数 | |
| if (network_speed === 0) { | |
| // nothing to do | |
| } else { | |
| handle_network_speed_change(start_time, end_time, network_speed); | |
| } | |
| } | |
| //start upload | |
| try { | |
| if (fs.readFileSync(_file).length === 0) { | |
| return false; | |
| } | |
| const fileLength = fs.readFileSync(_file).length; | |
| const partSize = 1024 * 1024; | |
| const result = await OSSCLIENT.multipartUpload(_objName, _file, { | |
| parallel: 4, // 并发上传的分片个数 | |
| partSize: partSize, // 每个part的大小,单位为b,此处设置为1MB | |
| timeout: 1000 * 60 * 10, //设置超时时间单位毫秒,此处设置为60秒 | |
| progress: (p, cpt, res) => { | |
| if (cpt && cpt.doneParts && cpt.doneParts.length > 0 && logFlag) { | |
| handle_network_speed(res, partSize); | |
| } | |
| } | |
| }); | |
| if (result.res.status === 200) { | |
| // 上传成功 | |
| if (fileLength <= partSize && logFlag) { | |
| handle_network_speed(result.res, fileLength); | |
| } | |
| try { | |
| if (logFlag) { | |
| log.info(result); | |
| } | |
| } catch (e) { | |
| } | |
| console.log('上传结束'); | |
| return 0 | |
| } else { | |
| // 失败 | |
| try { | |
| if (logFlag) { | |
| log.error(result); | |
| } | |
| } catch (e) { | |
| } | |
| return 1; | |
| } | |
| } catch (err) { | |
| if (OSSCLIENT.isCancel()) { | |
| // 取消上传 | |
| try { | |
| if (logFlag) { | |
| log.info("取消上传->" + _file); | |
| } | |
| } catch (e) { | |
| } | |
| return 2 | |
| } else if (err.code === 'ConnectionTimeoutError') { | |
| // 连接超时 | |
| try { | |
| if (logFlag) { | |
| log.log("连接超时!!!"); | |
| } | |
| } catch (e) { | |
| } | |
| } else { | |
| try { | |
| if (logFlag) { | |
| log.error(err); | |
| } | |
| } catch (e) { | |
| } | |
| } | |
| return 1; | |
| } | |
| } | |
| /** | |
| * 处理上传对象 | |
| * @param start_time 开始时间 | |
| * @param end_time 结束时间 | |
| * @param network_speed 平均每ms传输的字节数 | |
| * @returns {Promise<void>} | |
| */ | |
| const handle_network_speed_change = async (start_time, end_time, network_speed) => { | |
| // 如果超过10秒没有传输数据,则清空map | |
| if ((start_time - map_max_key) >= 10000) { | |
| map = {} | |
| } | |
| for (let i = start_time; i <= end_time; i++) { | |
| const value = await map[i]; | |
| if (value) { | |
| await change(i, value + network_speed); | |
| } else { | |
| await change(i, network_speed); | |
| } | |
| } | |
| }; | |
| 定义一个定时器,1s执行一次,用来刷新网速显示 | |
| /** | |
| * 定义一个1s的定时器 | |
| * 每次取当前时间前1s内发生的数据传输记录,计算上传速度 | |
| */ | |
| setInterval(() => { | |
| const now = new Date().getTime(); | |
| // 如果超过10秒没有传输数据,则清空map | |
| if ((now - map_max_key) >= 10000) { | |
| map = {} | |
| } | |
| const end_time = now - 1000; | |
| const start_time = end_time - 1000; | |
| let totalSize = 0; | |
| let totalCount = 0; | |
| for (let i = start_time; i <= end_time; i++) { | |
| if (map[i]) { | |
| totalCount++; | |
| totalSize += map[i] | |
| } | |
| } | |
| let network_speed = totalSize / 1024 / totalCount * 1000; | |
| if (!network_speed) { | |
| network_speed = '0.00 Kb/s' | |
| } else if (network_speed < 1024) { | |
| network_speed = network_speed.toFixed(2) + ' Kb/s' | |
| } else { | |
| network_speed = (network_speed / 1024); | |
| network_speed = network_speed.toFixed(2) + ' Mb/s' | |
| } | |
| mainWindow.webContents.send('handle_network_speed_change', network_speed); | |
| console.log(184, Object.keys(map).length) | |
| }, 1000); | |
| /** | |
| * 定义一个1s的定时器 | |
| * 每次取当前时间前1s内发生的数据传输记录,计算上传速度 | |
| */ | |
| setInterval(() => { | |
| const now = new Date().getTime(); | |
| // 如果超过10秒没有传输数据,则清空map | |
| if ((now - map_max_key) >= 10000) { | |
| map = {} | |
| } | |
| const end_time = now - 1000; | |
| const start_time = end_time - 1000; | |
| let totalSize = 0; | |
| let totalCount = 0; | |
| for (let i = start_time; i <= end_time; i++) { | |
| if (map[i]) { | |
| totalCount++; | |
| totalSize += map[i] | |
| } | |
| } | |
| let network_speed = totalSize / 1024 / totalCount * 1000; | |
| if (!network_speed) { | |
| network_speed = '0.00 Kb/s' | |
| } else if (network_speed < 1024) { | |
| network_speed = network_speed.toFixed(2) + ' Kb/s' | |
| } else { | |
| network_speed = (network_speed / 1024); | |
| network_speed = network_speed.toFixed(2) + ' Mb/s' | |
| } | |
| mainWindow.webContents.send('handle_network_speed_change', network_speed); | |
| console.log(184, Object.keys(map).length) | |
| }, 1000); | |
| ipcRenderer.on('handle_network_speed_change', async (event, network_speed) => { | |
| console.log(network_speed); | |
| this.setState({current_network_speed: network_speed}); | |
| }); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment