From 7bc16cbb07259358ae4b77cb5bf868fc74502f91 Mon Sep 17 00:00:00 2001 From: shixiaohua Date: Mon, 11 Mar 2024 18:28:15 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=B8=8A=E4=BC=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- elsrc/sync/tencent/UploadUtils.js | 71 +++++++++++++++++++ main.js | 10 +-- package-lock.json | 110 +++++++++++++++++++++++++++++- package.json | 1 + src/App.js | 3 +- src/components/CountUI/index.jsx | 28 -------- src/containers/Count/index.jsx | 22 ------ src/redux/dirMessage_reducer.js | 2 + src/utils/File/fileHelper.js | 24 ------- src/utils/useIpcRenderer.js | 3 +- 10 files changed, 191 insertions(+), 83 deletions(-) create mode 100644 elsrc/sync/tencent/UploadUtils.js delete mode 100644 src/components/CountUI/index.jsx delete mode 100644 src/containers/Count/index.jsx delete mode 100644 src/utils/File/fileHelper.js diff --git a/elsrc/sync/tencent/UploadUtils.js b/elsrc/sync/tencent/UploadUtils.js new file mode 100644 index 0000000..f20d464 --- /dev/null +++ b/elsrc/sync/tencent/UploadUtils.js @@ -0,0 +1,71 @@ +const COS = require('cos-nodejs-sdk-v5'); +const pathOpt = require("path"); +const cos = new COS({ + SecretId: 'AKIDvjKhqrfEaliRq11nMcrGZmsATiyNl1BA', + // 推荐使用环境变量获取;用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。 + // 子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140 + SecretKey: 'xpZCjCTVJzZG2wyy8mFVwLWTVVIqAKct', + Domain: 'https://note-1324909903.cos.ap-beijing.myqcloud.com' +}); +const Bucket='note-1324909903' +const Region = 'ap-beijing' +class UploadUtils { + constructor(store) { + this.store = store; + } + syncActiveFile() { + let tableBarItem = JSON.parse(this.store.get("persist:tableBarItem")); + if (!tableBarItem) { + return; + } + let activeFile = tableBarItem.activeKey?tableBarItem.activeKey.replaceAll('"',""):undefined; + console.log("activeFile:", activeFile) + if (activeFile) { + cos.headObject({ + Bucket:Bucket, + Region:Region, + // 不能以 / 开头 + Key: activeFile, + }, function(err, data) { + console.log("err || data.CommonPrefixes",err || data); + if (data&&data.ETag){ + // 文件存在,比较MD5值 + let md5= data.ETag.replaceAll('"',"") + console.log("fileList[0].ETag",md5) + }else { + console.log("cos.uploadFile") + cos.uploadFile({ + Bucket: Bucket, /* 填入您自己的存储桶,必须字段 */ + Region: Region, /* 存储桶所在地域,例如 ap-beijing,必须字段 */ + Key: activeFile, /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */ + FilePath: activeFile, /* 必须 */ + SliceSize: 1024 * 1024 * 5, /* 触发分块上传的阈值,超过5MB使用分块上传,非必须 */ + onTaskReady: function (taskId) { /* 非必须 */ + console.log(taskId); + }, + onProgress: function (progressData) { /* 非必须 */ + console.log(JSON.stringify(progressData)); + }, + onFileFinish: function (err, data, options) { /* 非必须 */ + console.log(options.Key + '上传' + (err ? '失败' : '完成')); + }, + // 支持自定义headers 非必须 + }, function (err, data) { + console.log(err || data); + }); + } + }); + } + + } + + syncFile() { + console.log("同步数据") + // 1. 先同步active文件数据 + this.syncActiveFile() + // 2. 同步bar中数据 + // 3. 同步树中的数据。 + } +} + +module.exports = UploadUtils diff --git a/main.js b/main.js index 33e9176..d70dfb7 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,7 @@ const {app, Menu, BrowserWindow,ipcMain,dialog} = require('electron') const path = require('path') const {menuRebuild} = require('./elsrc/TopMenu.js') +const UploadUtils = require("./elsrc/sync/tencent/UploadUtils") const Store = require('electron-store'); const store = new Store(); const isDev = require('electron-is-dev') @@ -65,11 +66,10 @@ app.whenReady().then(() => { // 点击托盘图标时通常会重新创建一个新窗口 app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) createWindow() + // 同步数据 }) - // ipcMain.on("redirectUrlTo",(event,value)=> - // browserWindow.webContents.send('redirectUrl', value) - // ) - + const uploadUtil = new UploadUtils(store); + uploadUtil.syncFile() ipcMain.handle("saveFileWithName",(listen,args)=>{ console.log("saveFileWithName") return dialog.showSaveDialog({"title":"保存文件",}) @@ -83,7 +83,7 @@ app.whenReady().then(() => { return store.set(key,value) }) ipcMain.handle("electronStoreGet",(listen,args)=>{ - console.log("electronStoreGet:",store.get(args)) + console.log("electronStoreGet:",args) return store.get(args) }) ipcMain.handle("electronStoreDelete",(listen,args)=>{ diff --git a/package-lock.json b/package-lock.json index bc6b249..bbac088 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "cos-nodejs-sdk-v5": "^2.13.3", "electron-is-dev": "^1.1.0", "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", @@ -9503,6 +9504,98 @@ "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, + "node_modules/cos-nodejs-sdk-v5": { + "version": "2.13.3", + "resolved": "https://registry.npmmirror.com/cos-nodejs-sdk-v5/-/cos-nodejs-sdk-v5-2.13.3.tgz", + "integrity": "sha512-hcgZ9UScbtl1CdgtXHpnDcCFeiRO7rE/eK0/Mk29/aIXTWZvhY1qFZDw1rwNtkZ2QD12ZzqINsXJQjaak4Tm/g==", + "dependencies": { + "conf": "^9.0.0", + "fast-xml-parser": "4.2.5", + "mime-types": "^2.1.24", + "request": "^2.88.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/ajv": { + "version": "7.2.4", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-7.2.4.tgz", + "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/ajv-formats": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-1.6.1.tgz", + "integrity": "sha512-4CjkH20If1lhR5CGtqkrVg3bbOtFEG80X9v6jDOIUhbzzbB+UzPBGy8GQhUNVZ0yvMHdMpawCOcy5ydGMsagGQ==", + "dependencies": { + "ajv": "^7.0.0" + }, + "peerDependencies": { + "ajv": "^7.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/conf": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/conf/-/conf-9.0.2.tgz", + "integrity": "sha512-rLSiilO85qHgaTBIIHQpsv8z+NnVfZq3cKuYNCXN1AOqPzced0GWZEe/A517VldRLyQYXUMyV+vszavE2jSAqw==", + "dependencies": { + "ajv": "^7.0.3", + "ajv-formats": "^1.5.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.0", + "json-schema-typed": "^7.0.3", + "make-dir": "^3.1.0", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/conf/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/cos-nodejs-sdk-v5/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -12633,6 +12726,17 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", @@ -23612,7 +23716,6 @@ "version": "6.3.0", "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -24536,6 +24639,11 @@ "node": ">=0.8.0" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/style-loader": { "version": "3.3.4", "resolved": "https://registry.npmmirror.com/style-loader/-/style-loader-3.3.4.tgz", diff --git a/package.json b/package.json index 0c93c74..b0e5704 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "make": "electron-forge make" }, "dependencies": { + "cos-nodejs-sdk-v5": "^2.13.3", "electron-is-dev": "^1.1.0", "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", diff --git a/src/App.js b/src/App.js index c088133..62c0acb 100644 --- a/src/App.js +++ b/src/App.js @@ -33,7 +33,8 @@ function App() { return ( <> {/* 注册路由 */} - {element} + {element} + {/**/} ) diff --git a/src/components/CountUI/index.jsx b/src/components/CountUI/index.jsx deleted file mode 100644 index 543352e..0000000 --- a/src/components/CountUI/index.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { Component } from 'react' -import { Button } from 'antd' - -export default class index extends Component { - addRedux = () => { - const { value } = this.selectNumber - console.log(this.props) - this.props.jia(value * 1) - } - addReduxSync = () => { - const { value } = this.selectNumber - this.props.jian(value * 1,1000) - } - render() { - console.log(this.props) - return ( -
-

当前求和为: {this.props.count}

- - - -
- ) - } -} diff --git a/src/containers/Count/index.jsx b/src/containers/Count/index.jsx deleted file mode 100644 index a4bb23c..0000000 --- a/src/containers/Count/index.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import CountUI from '../../components/CountUI' -// import store from "../../redux/store" -import { connect } from 'react-redux' -import { createIncrementAction,createIncrementSyncAction } from '../../redux/count_action'; -// 返回状态给ui组件 -function mapStateToProps(state) { - return { count: state.he } -} -function mapDispatchToProps(dispatch) { - return ({ - jia: (data) => { - // 通知redux处理 - dispatch(createIncrementAction(data)) - }, - jian:(data,time) => { - // 通知redux处理 - dispatch(createIncrementSyncAction(data,time)) - } - }) -} -const CountContainer = connect(mapStateToProps, mapDispatchToProps)(CountUI) -export default CountContainer \ No newline at end of file diff --git a/src/redux/dirMessage_reducer.js b/src/redux/dirMessage_reducer.js index c1d337c..34d733b 100644 --- a/src/redux/dirMessage_reducer.js +++ b/src/redux/dirMessage_reducer.js @@ -8,6 +8,8 @@ import {func} from "prop-types"; fileName:文件名.文件扩展名 fileDir:文件路径 filePath:文件路径+fileName + fileId:文件id + fileMd5:文件Md5 "fileName": filePath, "filePath": filePath, diff --git a/src/utils/File/fileHelper.js b/src/utils/File/fileHelper.js deleted file mode 100644 index f057604..0000000 --- a/src/utils/File/fileHelper.js +++ /dev/null @@ -1,24 +0,0 @@ -// const fs = require("fs").promises - -// const fileHelper =async (path) => { -// console.log("fileHelper-----------",fs) -// return await fs.readFile(path, {encoding: 'utf8'}) -// } - -// = { -// readFile: async (path) => { -// return await fs.readFile(path, {encoding: 'utf8'}) -// }, -// writeFile: (path, content) => { -// return fs.writeFile(path, content, { encoding: 'utf8'}) -// }, -// renameFile: (path, newPath) => { -// return fs.rename(path, newPath) -// }, -// deleteFile: (path) => { -// return fs.unlink(path) -// } -// } - -// module.exports = fileHelper - diff --git a/src/utils/useIpcRenderer.js b/src/utils/useIpcRenderer.js index 4e137b6..851d04d 100644 --- a/src/utils/useIpcRenderer.js +++ b/src/utils/useIpcRenderer.js @@ -1,7 +1,6 @@ import { useEffect } from 'react' const { ipcRenderer } = window.require('electron') - const useIpcRenderer = (keyCallbackMap) => { useEffect(() => { Object.keys(keyCallbackMap).forEach(key => { @@ -16,4 +15,4 @@ const useIpcRenderer = (keyCallbackMap) => { }) } -export default useIpcRenderer \ No newline at end of file +export default useIpcRenderer