feat:上传文件

This commit is contained in:
shixiaohua 2024-03-11 18:28:15 +08:00
parent 57fbb7a259
commit 7bc16cbb07
10 changed files with 191 additions and 83 deletions

View File

@ -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.jpga/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

10
main.js
View File

@ -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)=>{

110
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -33,7 +33,8 @@ function App() {
return (
<>
{/* 注册路由 */}
{element}<Note/>
{element}
{/*<Note/>*/}
</>
)

View File

@ -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 (
<div>
<h1>当前求和为: {this.props.count}</h1>
<select ref={c => this.selectNumber = c}>
<option>1</option>
<option>2</option>
</select>
<Button onClick={this.addRedux}>+</Button>
<Button onClick={this.addReduxSync}>+sync</Button>
</div>
)
}
}

View File

@ -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

View File

@ -8,6 +8,8 @@ import {func} from "prop-types";
fileName:文件名.文件扩展名
fileDir:文件路径
filePath:文件路径+fileName
fileId:文件id
fileMd5:文件Md5
"fileName": filePath,
"filePath": filePath,

View File

@ -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

View File

@ -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
export default useIpcRenderer