mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-01-23 06:38:13 -05:00
Added: v5 options
This commit is contained in:
parent
4a685e0474
commit
2496c0b467
@ -5,21 +5,33 @@ import { Notification, clipboard } from 'electron'
|
|||||||
import crypto from 'crypto'
|
import crypto from 'crypto'
|
||||||
|
|
||||||
// generate COS signature string
|
// generate COS signature string
|
||||||
const generateSignature = () => {
|
const generateSignature = (fileName) => {
|
||||||
const options = db.read().get('picBed.tcyun').value()
|
const options = db.read().get('picBed.tcyun').value()
|
||||||
const secretId = options.secretId
|
const secretId = options.secretId
|
||||||
const secretKey = options.secretKey
|
const secretKey = options.secretKey
|
||||||
const appId = options.appId
|
const appId = options.appId
|
||||||
const bucket = options.bucket
|
const bucket = options.bucket
|
||||||
const random = Math.floor(Math.random() * 10000000000)
|
let signature
|
||||||
const current = parseInt(new Date().getTime() / 1000) - 1
|
if (!options.version || options.version === 'v4') {
|
||||||
const expired = current + 3600
|
const random = Math.floor(Math.random() * 10000000000)
|
||||||
|
const current = parseInt(new Date().getTime() / 1000) - 1
|
||||||
|
const expired = current + 3600
|
||||||
|
|
||||||
const multiSignature = `a=${appId}&b=${bucket}&k=${secretId}&e=${expired}&t=${current}&r=${random}&f=`
|
const multiSignature = `a=${appId}&b=${bucket}&k=${secretId}&e=${expired}&t=${current}&r=${random}&f=`
|
||||||
|
|
||||||
const signHexKey = crypto.createHmac('sha1', secretKey).update(multiSignature).digest()
|
const signHexKey = crypto.createHmac('sha1', secretKey).update(multiSignature).digest()
|
||||||
const tempString = Buffer.concat([signHexKey, Buffer.from(multiSignature)])
|
const tempString = Buffer.concat([signHexKey, Buffer.from(multiSignature)])
|
||||||
const signature = Buffer.from(tempString).toString('base64')
|
signature = Buffer.from(tempString).toString('base64')
|
||||||
|
} else {
|
||||||
|
const today = Math.floor(new Date().getTime() / 1000)
|
||||||
|
const tomorrow = today + 86400
|
||||||
|
const signTime = `${today};${tomorrow}`
|
||||||
|
const signKey = crypto.createHmac('sha1', secretKey).update(signTime).digest('hex')
|
||||||
|
const httpString = `put\n/${options.path}${fileName}\n\nhost=${options.bucket}.cos.${options.area}.myqcloud.com\n`
|
||||||
|
const sha1edHttpString = crypto.createHash('sha1').update(httpString).digest('hex')
|
||||||
|
const stringToSign = `sha1\n${signTime}\n${sha1edHttpString}\n`
|
||||||
|
signature = crypto.createHmac('sha1', signKey).update(stringToSign).digest('hex')
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
signature,
|
signature,
|
||||||
appId,
|
appId,
|
||||||
@ -28,19 +40,38 @@ const generateSignature = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const postOptions = (fileName, signature, imgBase64) => {
|
const postOptions = (fileName, signature, imgBase64) => {
|
||||||
const area = db.read().get('picBed.tcyun.area').value()
|
const options = db.read().get('picBed.tcyun').value()
|
||||||
const path = db.read().get('picBed.tcyun.path').value()
|
const area = options.area
|
||||||
return {
|
const path = options.path
|
||||||
method: 'POST',
|
console.log(options.verison)
|
||||||
url: `http://${area}.file.myqcloud.com/files/v2/${signature.appId}/${signature.bucket}/${path}${fileName}`,
|
if (!options.version || options.version === 'v4') {
|
||||||
headers: {
|
return {
|
||||||
Host: `${area}.file.myqcloud.com`,
|
method: 'POST',
|
||||||
Authorization: signature.signature,
|
url: `http://${area}.file.myqcloud.com/files/v2/${signature.appId}/${signature.bucket}/${path}${fileName}`,
|
||||||
contentType: 'multipart/form-data'
|
headers: {
|
||||||
},
|
Host: `${area}.file.myqcloud.com`,
|
||||||
formData: {
|
Authorization: signature.signature,
|
||||||
op: 'upload',
|
contentType: 'multipart/form-data'
|
||||||
filecontent: Buffer.from(imgBase64, 'base64')
|
},
|
||||||
|
formData: {
|
||||||
|
op: 'upload',
|
||||||
|
filecontent: Buffer.from(imgBase64, 'base64')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
method: 'PUT',
|
||||||
|
url: `http://${options.bucket}.cos.${options.area}.myqcloud.com/${path}${fileName}`,
|
||||||
|
headers: {
|
||||||
|
Host: `${options.bucket}.cos.${options.area}.myqcloud.com`,
|
||||||
|
Authorization: signature.signature,
|
||||||
|
contentType: 'multipart/form-data'
|
||||||
|
},
|
||||||
|
formData: {
|
||||||
|
op: 'upload',
|
||||||
|
filecontent: Buffer.from(imgBase64, 'base64')
|
||||||
|
},
|
||||||
|
resolveWithFullResponse: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,15 +81,18 @@ const tcYunUpload = async (img, type, webContents) => {
|
|||||||
webContents.send('uploadProgress', 0)
|
webContents.send('uploadProgress', 0)
|
||||||
const imgList = await img2Base64[type](img)
|
const imgList = await img2Base64[type](img)
|
||||||
webContents.send('uploadProgress', 30)
|
webContents.send('uploadProgress', 30)
|
||||||
const singature = generateSignature()
|
|
||||||
const length = imgList.length
|
const length = imgList.length
|
||||||
const tcYunOptions = db.read().get('picBed.tcyun').value()
|
const tcYunOptions = db.read().get('picBed.tcyun').value()
|
||||||
const customUrl = tcYunOptions.customUrl
|
const customUrl = tcYunOptions.customUrl
|
||||||
const path = tcYunOptions.path
|
const path = tcYunOptions.path
|
||||||
for (let i in imgList) {
|
for (let i in imgList) {
|
||||||
|
const singature = generateSignature(imgList[i].fileName)
|
||||||
const options = postOptions(imgList[i].fileName, singature, imgList[i].base64Image)
|
const options = postOptions(imgList[i].fileName, singature, imgList[i].base64Image)
|
||||||
|
console.log(123, options)
|
||||||
const res = await request(options)
|
const res = await request(options)
|
||||||
const body = JSON.parse(res)
|
// const body = JSON.parse(res)
|
||||||
|
const body = `${res}`
|
||||||
|
console.log(body)
|
||||||
if (body.message === 'SUCCESS') {
|
if (body.message === 'SUCCESS') {
|
||||||
delete imgList[i].base64Image
|
delete imgList[i].base64Image
|
||||||
if (customUrl) {
|
if (customUrl) {
|
||||||
|
@ -11,6 +11,19 @@
|
|||||||
label-width="120px"
|
label-width="120px"
|
||||||
:model="form"
|
:model="form"
|
||||||
size="mini">
|
size="mini">
|
||||||
|
<el-form-item
|
||||||
|
label="COS版本"
|
||||||
|
>
|
||||||
|
<el-switch
|
||||||
|
v-model="form.version"
|
||||||
|
active-text="v4"
|
||||||
|
inactive-text="v5"
|
||||||
|
active-value="v4"
|
||||||
|
inactive-value="v5"
|
||||||
|
inactive-color="#67C23A"
|
||||||
|
></el-switch>
|
||||||
|
<i class="el-icon-question" @click="openWiki"></i>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
label="设定SecretId"
|
label="设定SecretId"
|
||||||
prop="secretId"
|
prop="secretId"
|
||||||
@ -86,7 +99,8 @@ export default {
|
|||||||
appId: '',
|
appId: '',
|
||||||
area: '',
|
area: '',
|
||||||
path: '',
|
path: '',
|
||||||
customUrl: ''
|
customUrl: '',
|
||||||
|
version: 'v4'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -113,6 +127,9 @@ export default {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
openWiki () {
|
||||||
|
this.$electron.remote.shell.openExternal('https://github.com/Molunerfinn/PicGo/wiki/%E8%AF%A6%E7%BB%86%E7%AA%97%E5%8F%A3%E7%9A%84%E4%BD%BF%E7%94%A8#%E5%BE%AE%E5%8D%9A%E5%9B%BE%E5%BA%8A')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,4 +164,17 @@ export default {
|
|||||||
.el-radio-button__inner
|
.el-radio-button__inner
|
||||||
border-left none
|
border-left none
|
||||||
border-radius 0 14px 14px 0
|
border-radius 0 14px 14px 0
|
||||||
|
.el-switch__label
|
||||||
|
color #eee
|
||||||
|
&.is-active
|
||||||
|
color #409EFF
|
||||||
|
.el-icon-question
|
||||||
|
font-size 20px
|
||||||
|
float right
|
||||||
|
margin-top 9px
|
||||||
|
color #eee
|
||||||
|
cursor pointer
|
||||||
|
transition .2s color ease-in-out
|
||||||
|
&:hover
|
||||||
|
color #409EFF
|
||||||
</style>
|
</style>
|
Loading…
Reference in New Issue
Block a user