mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-03-13 08:28:13 -04:00
Finished: rename file before upload
This commit is contained in:
parent
757a7d1260
commit
74b94feb74
@ -2,17 +2,51 @@ import fs from 'fs-extra'
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import sizeOf from 'image-size'
|
import sizeOf from 'image-size'
|
||||||
import fecha from 'fecha'
|
import fecha from 'fecha'
|
||||||
|
import { BrowserWindow, ipcMain } from 'electron'
|
||||||
|
import db from '../../datastore/index.js'
|
||||||
|
const renameURL = process.env.NODE_ENV === 'development' ? `http://localhost:9080/#rename-page` : `file://${__dirname}/index.html#rename-page`
|
||||||
|
|
||||||
|
const createRenameWindow = () => {
|
||||||
|
let options = {
|
||||||
|
height: 175,
|
||||||
|
width: 300,
|
||||||
|
show: true,
|
||||||
|
fullscreenable: false,
|
||||||
|
resizable: false,
|
||||||
|
vibrancy: 'ultra-dark',
|
||||||
|
webPreferences: {
|
||||||
|
backgroundThrottling: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
options.show = true
|
||||||
|
options.backgroundColor = '#3f3c37'
|
||||||
|
}
|
||||||
|
|
||||||
|
const window = new BrowserWindow(options)
|
||||||
|
window.loadURL(renameURL)
|
||||||
|
return window
|
||||||
|
}
|
||||||
|
|
||||||
const imgFromPath = async (imgPath) => {
|
const imgFromPath = async (imgPath) => {
|
||||||
let results = []
|
let results = []
|
||||||
|
let rename = db.read().get('picBed.rename').value()
|
||||||
await Promise.all(imgPath.map(async item => {
|
await Promise.all(imgPath.map(async item => {
|
||||||
|
let name
|
||||||
|
let fileName = path.basename(item)
|
||||||
|
if (rename) {
|
||||||
|
const window = createRenameWindow()
|
||||||
|
await waitForShow(window.webContents)
|
||||||
|
window.webContents.send('rename', fileName, window.webContents.id)
|
||||||
|
name = await waitForRename(window, window.webContents.id)
|
||||||
|
}
|
||||||
let buffer = await fs.readFile(item)
|
let buffer = await fs.readFile(item)
|
||||||
let base64Image = Buffer.from(buffer, 'binary').toString('base64')
|
let base64Image = Buffer.from(buffer, 'binary').toString('base64')
|
||||||
let fileName = path.basename(item)
|
|
||||||
let imgSize = sizeOf(item)
|
let imgSize = sizeOf(item)
|
||||||
results.push({
|
results.push({
|
||||||
base64Image,
|
base64Image,
|
||||||
fileName,
|
fileName: name || fileName,
|
||||||
width: imgSize.width,
|
width: imgSize.width,
|
||||||
height: imgSize.height,
|
height: imgSize.height,
|
||||||
extname: path.extname(item)
|
extname: path.extname(item)
|
||||||
@ -21,13 +55,21 @@ const imgFromPath = async (imgPath) => {
|
|||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
const imgFromClipboard = (file) => {
|
const imgFromClipboard = async (file) => {
|
||||||
let result = []
|
let result = []
|
||||||
|
let rename = db.read().get('picBed.rename').value()
|
||||||
if (file !== null) {
|
if (file !== null) {
|
||||||
const today = fecha.format(new Date(), 'YYYYMMDDHHmmss')
|
let name
|
||||||
|
const today = fecha.format(new Date(), 'YYYYMMDDHHmmss') + '.png'
|
||||||
|
if (rename) {
|
||||||
|
const window = createRenameWindow()
|
||||||
|
await waitForShow(window.webContents)
|
||||||
|
window.webContents.send('rename', today, window.webContents.id)
|
||||||
|
name = await waitForRename(window, window.webContents.id)
|
||||||
|
}
|
||||||
result.push({
|
result.push({
|
||||||
base64Image: file.imgUrl.replace(/^data\S+,/, ''),
|
base64Image: file.imgUrl.replace(/^data\S+,/, ''),
|
||||||
fileName: `${today}.png`,
|
fileName: name || today,
|
||||||
width: file.width,
|
width: file.width,
|
||||||
height: file.height,
|
height: file.height,
|
||||||
extname: '.png'
|
extname: '.png'
|
||||||
@ -38,10 +80,18 @@ const imgFromClipboard = (file) => {
|
|||||||
|
|
||||||
const imgFromUploader = async (files) => {
|
const imgFromUploader = async (files) => {
|
||||||
let results = []
|
let results = []
|
||||||
|
let rename = db.read().get('picBed.rename').value()
|
||||||
await Promise.all(files.map(async item => {
|
await Promise.all(files.map(async item => {
|
||||||
|
let name
|
||||||
|
if (rename) {
|
||||||
|
const window = createRenameWindow()
|
||||||
|
await waitForShow(window.webContents)
|
||||||
|
window.webContents.send('rename', item.name, window.webContents.id)
|
||||||
|
name = await waitForRename(window, window.webContents.id)
|
||||||
|
}
|
||||||
let buffer = await fs.readFile(item.path)
|
let buffer = await fs.readFile(item.path)
|
||||||
let base64Image = Buffer.from(buffer, 'binary').toString('base64')
|
let base64Image = Buffer.from(buffer, 'binary').toString('base64')
|
||||||
let fileName = item.name
|
let fileName = name || item.name
|
||||||
let imgSize = sizeOf(item.path)
|
let imgSize = sizeOf(item.path)
|
||||||
results.push({
|
results.push({
|
||||||
base64Image,
|
base64Image,
|
||||||
@ -54,6 +104,27 @@ const imgFromUploader = async (files) => {
|
|||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const waitForShow = (webcontent) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
webcontent.on('dom-ready', () => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const waitForRename = (window, id) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ipcMain.once(`rename${id}`, (evt, newName) => {
|
||||||
|
resolve(newName)
|
||||||
|
window.hide()
|
||||||
|
})
|
||||||
|
window.on('close', () => {
|
||||||
|
resolve(null)
|
||||||
|
ipcMain.removeAllListeners(`rename${id}`)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
imgFromPath,
|
imgFromPath,
|
||||||
imgFromClipboard,
|
imgFromClipboard,
|
||||||
|
@ -63,7 +63,7 @@ const postOptions = (fileName, signature, imgBase64) => {
|
|||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
url: `http://${options.bucket}.cos.${options.area}.myqcloud.com/${path}${fileName}`,
|
url: `http://${options.bucket}.cos.${options.area}.myqcloud.com/${path}${encodeURI(fileName)}`,
|
||||||
headers: {
|
headers: {
|
||||||
Host: `${options.bucket}.cos.${options.area}.myqcloud.com`,
|
Host: `${options.bucket}.cos.${options.area}.myqcloud.com`,
|
||||||
Authorization: `q-sign-algorithm=sha1&q-ak=${options.secretId}&q-sign-time=${signature.signTime}&q-key-time=${signature.signTime}&q-header-list=host&q-url-param-list=&q-signature=${signature.signature}`,
|
Authorization: `q-sign-algorithm=sha1&q-ak=${options.secretId}&q-sign-time=${signature.signTime}&q-key-time=${signature.signTime}&q-header-list=host&q-url-param-list=&q-signature=${signature.signature}`,
|
||||||
|
56
src/renderer/components/RenamePage.vue
Normal file
56
src/renderer/components/RenamePage.vue
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<template>
|
||||||
|
<div id="rename-page">
|
||||||
|
<el-form>
|
||||||
|
<el-form-item
|
||||||
|
label="文件改名"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="fileName"
|
||||||
|
size="small"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-row>
|
||||||
|
<div class="pull-right">
|
||||||
|
<el-button @click="cancel" round size="mini">取消</el-button>
|
||||||
|
<el-button type="primary" @click="confirmName" round size="mini">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'rename-page',
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
fileName: '',
|
||||||
|
id: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
this.$electron.ipcRenderer.on('rename', (event, name, id) => {
|
||||||
|
this.fileName = name
|
||||||
|
this.id = id
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
confirmName () {
|
||||||
|
this.$electron.ipcRenderer.send(`rename${this.id}`, this.fileName)
|
||||||
|
},
|
||||||
|
cancel () {
|
||||||
|
this.$electron.ipcRenderer.send(`rename${this.id}`, null)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeDestroy () {
|
||||||
|
this.$electron.ipcRenderer.removeAllListeners('rename')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang='stylus'>
|
||||||
|
#rename-page
|
||||||
|
padding 0 20px
|
||||||
|
.pull-right
|
||||||
|
float right
|
||||||
|
.el-form-item__label
|
||||||
|
color #ddd
|
||||||
|
</style>
|
@ -48,6 +48,7 @@
|
|||||||
v-model="form.rename"
|
v-model="form.rename"
|
||||||
active-text="开"
|
active-text="开"
|
||||||
inactive-text="关"
|
inactive-text="关"
|
||||||
|
@change="handleRename"
|
||||||
></el-switch>
|
></el-switch>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -58,8 +59,9 @@
|
|||||||
@change="handleShowPicBedListChange"
|
@change="handleShowPicBedListChange"
|
||||||
>
|
>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-for="(item, index) in picBed"
|
v-for="item in picBed"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
|
:key="item.name"
|
||||||
></el-checkbox>
|
></el-checkbox>
|
||||||
</el-checkbox-group>
|
</el-checkbox-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -212,6 +214,9 @@ export default {
|
|||||||
handleAutoStartChange (val) {
|
handleAutoStartChange (val) {
|
||||||
this.$db.read().set('picBed.autoStart', val).write()
|
this.$db.read().set('picBed.autoStart', val).write()
|
||||||
this.$electron.ipcRenderer.send('autoStart', val)
|
this.$electron.ipcRenderer.send('autoStart', val)
|
||||||
|
},
|
||||||
|
handleRename (val) {
|
||||||
|
this.$db.read().set('picBed.rename', val).write()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeDestroy () {
|
beforeDestroy () {
|
||||||
|
@ -173,11 +173,10 @@ export default {
|
|||||||
#file-uploader
|
#file-uploader
|
||||||
display none
|
display none
|
||||||
.upload-progress
|
.upload-progress
|
||||||
margin-top 20px
|
|
||||||
opacity 0
|
opacity 0
|
||||||
transition all .2s ease-in-out
|
transition all .2s ease-in-out
|
||||||
width 450px
|
width 450px
|
||||||
margin-left 25px
|
margin 20px auto 0
|
||||||
&.show
|
&.show
|
||||||
opacity 1
|
opacity 1
|
||||||
.el-progress-bar__inner
|
.el-progress-bar__inner
|
||||||
|
@ -10,6 +10,11 @@ export default new Router({
|
|||||||
name: 'tray-page',
|
name: 'tray-page',
|
||||||
component: require('@/components/TrayPage').default
|
component: require('@/components/TrayPage').default
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/rename-page',
|
||||||
|
name: 'rename-page',
|
||||||
|
component: require('@/components/RenamePage').default
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/setting',
|
path: '/setting',
|
||||||
name: 'setting-page',
|
name: 'setting-page',
|
||||||
|
Loading…
Reference in New Issue
Block a user