feat:上传文件
This commit is contained in:
parent
57fbb7a259
commit
7bc16cbb07
|
@ -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
|
10
main.js
10
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)=>{
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -33,7 +33,8 @@ function App() {
|
|||
return (
|
||||
<>
|
||||
{/* 注册路由 */}
|
||||
{element}<Note/>
|
||||
{element}
|
||||
{/*<Note/>*/}
|
||||
</>
|
||||
)
|
||||
|
||||
|
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -8,6 +8,8 @@ import {func} from "prop-types";
|
|||
fileName:文件名.文件扩展名
|
||||
fileDir:文件路径
|
||||
filePath:文件路径+fileName
|
||||
fileId:文件id
|
||||
fileMd5:文件Md5
|
||||
|
||||
"fileName": filePath,
|
||||
"filePath": filePath,
|
||||
|
|
|
@ -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
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
import { useEffect } from 'react'
|
||||
const { ipcRenderer } = window.require('electron')
|
||||
|
||||
|
||||
const useIpcRenderer = (keyCallbackMap) => {
|
||||
useEffect(() => {
|
||||
Object.keys(keyCallbackMap).forEach(key => {
|
||||
|
|
Loading…
Reference in New Issue