From 68b831e1559798862fd2517d85b85631f49ca5a1 Mon Sep 17 00:00:00 2001 From: shixiaohua Date: Thu, 14 Mar 2024 09:11:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=B7=BB=E5=8A=A0=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- elsrc/sync/tencent/UploadUtils.js | 183 ++++++++++++++++++++++-------- 1 file changed, 136 insertions(+), 47 deletions(-) diff --git a/elsrc/sync/tencent/UploadUtils.js b/elsrc/sync/tencent/UploadUtils.js index db5dca6..cbc8c5c 100644 --- a/elsrc/sync/tencent/UploadUtils.js +++ b/elsrc/sync/tencent/UploadUtils.js @@ -1,7 +1,8 @@ const COS = require('cos-nodejs-sdk-v5'); const {dialog} = require('electron') -const {readFileSync}=require('node:fs') +const {readFileSync} = require('node:fs') const md5 = require("md5"); + class UploadUtils { static cos = new COS({ @@ -11,17 +12,93 @@ class UploadUtils { SecretKey: 'xpZCjCTVJzZG2wyy8mFVwLWTVVIqAKct', Domain: 'https://note-1324909903.cos.ap-beijing.myqcloud.com' }); - static Bucket='note-1324909903' + static Bucket = 'note-1324909903' static Region = 'ap-beijing' constructor(store) { this.store = store; } + getActiveFile() { + let tableBarItem = JSON.parse(this.store.get("persist:tableBarItem")); + if (!tableBarItem) { + return; + } + return tableBarItem.activeKey ? tableBarItem.activeKey.replaceAll('"', "") : undefined; + } - upLoadFileUtil(activeFile){UploadUtils.selfUploadFile(activeFile)} - downLoadFileUtil(activeFile){UploadUtils.selfDownLoadFile(activeFile)} + /* + * 检测本地和远程文件是否相同 + */ + getLocalFileMd5(activeFile) { + let dirMessage = JSON.parse(this.store.get("persist:dirMessage")); + let fileMd5 + if (activeFile && dirMessage && dirMessage.data) { + console.log("dirMessage.data", JSON.parse(dirMessage.data, [])) + let find = JSON.parse(dirMessage.data, []).find(file => file.fileId === activeFile || file.filePath === activeFile); + if (find) { + fileMd5 = find.fileMd5; + } + } + if (!fileMd5) { + fileMd5 = md5(readFileSync(activeFile).toString()) + } + return fileMd5 + } - static selfUploadFile(activeFile){ + + upLoadFileUtil(activeFile) { + // 判断文件是否相同 + let fileMd5 = this.getLocalFileMd5(activeFile); + UploadUtils.cos.headObject({ + Bucket: UploadUtils.Bucket, + Region: UploadUtils.Region, + // 不能以 / 开头 + Key: activeFile, + }, function (err, data) { + if (data && data.ETag) { + // 文件存在,比较MD5值 + let onlineMd5 = data.ETag.replaceAll('"', "") + if (onlineMd5 === fileMd5) { + dialog.showMessageBoxSync({ + "message": "云文件和本地相同无需同步", + "type": "info", + "buttons": ["确认"], + "defaultId": 0 + }); + } + }else { + UploadUtils.selfUploadFile(activeFile) + } + }) + } + + downLoadFileUtil(activeFile) { + // 判断文件是否相同 + let fileMd5 = this.getLocalFileMd5(activeFile); + UploadUtils.cos.headObject({ + Bucket: UploadUtils.Bucket, + Region: UploadUtils.Region, + // 不能以 / 开头 + Key: activeFile, + }, function (err, data) { + if (data && data.ETag) { + // 文件存在,比较MD5值 + let onlineMd5 = data.ETag.replaceAll('"', "") + if (onlineMd5 === fileMd5) { + dialog.showMessageBoxSync({ + "message": "云文件和本地相同无需同步", + "type": "info", + "buttons": ["确认"], + "defaultId": 0 + }); + } + }else { + UploadUtils.selfDownLoadFile(activeFile) + } + }) + } + + static selfUploadFile(activeFile) { console.log("cos.uploadFile") UploadUtils.cos.uploadFile({ Bucket: UploadUtils.Bucket, /* 填入您自己的存储桶,必须字段 */ @@ -37,15 +114,31 @@ class UploadUtils { }, onFileFinish: function (err, data, options) { /* 非必须 */ console.log(options.Key + '上传' + (err ? '失败' : '完成')); + if (err){ + dialog.showMessageBoxSync({ + "message": err, + "type": "error", + "buttons": ["确认"], + "defaultId": 0 + }) + }else { + dialog.showMessageBoxSync({ + "message": "同步完成", + "type": "info", + "buttons": ["确认"], + "defaultId": 0 + }) + } }, // 支持自定义headers 非必须 }, function (err, data) { console.log(err || data); + }); } - static selfDownLoadFile(activeFile){ - console.log("cos.downloadFile",activeFile) + static selfDownLoadFile(activeFile) { + console.log("cos.downloadFile", activeFile) UploadUtils.cos.getObject({ Bucket: UploadUtils.Bucket, /* 填入您自己的存储桶,必须字段 */ Region: UploadUtils.Region, /* 存储桶所在地域,例如 ap-beijing,必须字段 */ @@ -54,66 +147,62 @@ class UploadUtils { // 支持自定义headers 非必须 }, function (err, data) { console.log(err || data); + if (err){ + dialog.showMessageBoxSync({ + "message": err, + "type": "error", + "buttons": ["确认"], + "defaultId": 0 + }) + }else { + dialog.showMessageBoxSync({ + "message": "同步完成", + "type": "info", + "buttons": ["确认"], + "defaultId": 0 + }) + } }); } - getActiveFile(){ - let tableBarItem = JSON.parse(this.store.get("persist:tableBarItem")); - if (!tableBarItem) { - return; - } - return tableBarItem.activeKey?tableBarItem.activeKey.replaceAll('"',""):undefined; - } - syncActiveFile() { let activeFile = this.getActiveFile(); console.log("activeFile:", activeFile) if (activeFile) { - let dirMessage = JSON.parse(this.store.get("persist:dirMessage")); + let fileMd5 = this.getLocalFileMd5(activeFile); UploadUtils.cos.headObject({ - Bucket:UploadUtils.Bucket, - Region:UploadUtils.Region, + Bucket: UploadUtils.Bucket, + Region: UploadUtils.Region, // 不能以 / 开头 Key: activeFile, - }, function(err, data) { - console.log("err || data.CommonPrefixes"+activeFile,err || data); - if (data&&data.ETag){ + }, function (err, data) { + console.log("err || data.CommonPrefixes" + activeFile, err || data); + if (data && data.ETag) { // 文件存在,比较MD5值 - let onlineMd5= data.ETag.replaceAll('"',"") - let fileMd5 - if (dirMessage&&dirMessage.data) { - console.log("dirMessage.data",JSON.parse(dirMessage.data,[])) - let find = JSON.parse(dirMessage.data,[]).find(file=>file.fileId===activeFile||file.filePath===activeFile); - if (find){ - fileMd5= find.fileMd5; - } - } - if (!fileMd5){ - fileMd5=md5(readFileSync(activeFile).toString()) - } - if (onlineMd5===fileMd5){ + let onlineMd5 = data.ETag.replaceAll('"', "") + if (onlineMd5 === fileMd5) { return } - console.log("fileList[0].ETag",onlineMd5) + console.log("fileList[0].ETag", onlineMd5) let number = dialog.showMessageBoxSync({ - "message":"云文件已修改是否同步到本地", - "type":"info", - "buttons":["是","否"], - "defaultId":0 + "message": "云文件已修改是否同步到本地", + "type": "info", + "buttons": ["是", "否"], + "defaultId": 0 }); - if (number===0){ + if (number === 0) { UploadUtils.selfDownLoadFile(activeFile) - }else if(number===1){ + } else if (number === 1) { if (dialog.showMessageBoxSync({ - "message":"是否使用本地文件覆盖远程文件", - "type":"info", - "buttons":["是","否"], - "defaultId":0 - })===0){ + "message": "是否使用本地文件覆盖远程文件", + "type": "info", + "buttons": ["是", "否"], + "defaultId": 0 + }) === 0) { UploadUtils.selfUploadFile(activeFile) } } - }else { + } else { UploadUtils.selfUploadFile(activeFile) } });