From 21e870deafcec8b952fbb6d8ce1974517f7c4019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92=E8=B5=AB=E8=90=9D?= Date: Fri, 17 Feb 2023 13:27:25 +0800 Subject: [PATCH] :sparkles: Feature: album remote deletion now Support picgo-plugin-s3 --- package.json | 2 +- src/renderer/apis/allApi.ts | 4 +++- src/renderer/apis/awss3.ts | 39 ++++++++++++++++++++++++++++++++++ src/renderer/pages/Gallery.vue | 2 +- yarn.lock | 8 +++---- 5 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 src/renderer/apis/awss3.ts diff --git a/package.json b/package.json index 5f6c0a1..561aa64 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@picgo/store": "^2.0.4", "@types/mime-types": "^2.1.1", "ali-oss": "^6.17.1", - "aws-sdk": "^2.1304.0", + "aws-sdk": "^2.1317.0", "axios": "^1.3.2", "compare-versions": "^4.1.3", "core-js": "^3.27.1", diff --git a/src/renderer/apis/allApi.ts b/src/renderer/apis/allApi.ts index 8f7a970..58ae947 100644 --- a/src/renderer/apis/allApi.ts +++ b/src/renderer/apis/allApi.ts @@ -5,6 +5,7 @@ import QiniuApi from './qiniu' import ImgurApi from './imgur' import GithubApi from './github' import UpyunApi from './upyun' +import AwsS3Api from './awss3' const apiMap: IStringKeyMap = { smms: SmmsApi, @@ -13,7 +14,8 @@ const apiMap: IStringKeyMap = { qiniu: QiniuApi, imgur: ImgurApi, github: GithubApi, - upyun: UpyunApi + upyun: UpyunApi, + 'aws-s3': AwsS3Api } export default class ALLApi { diff --git a/src/renderer/apis/awss3.ts b/src/renderer/apis/awss3.ts new file mode 100644 index 0000000..9a9c5f4 --- /dev/null +++ b/src/renderer/apis/awss3.ts @@ -0,0 +1,39 @@ +import { S3 } from 'aws-sdk' + +export default class AwsS3Api { + static async delete (configMap: IStringKeyMap): Promise { + const { imgUrl, config: { accessKeyID, secretAccessKey, bucketName, region, endpoint, pathStyleAccess } } = configMap + try { + const url = new URL(imgUrl) + const fileKey = url.pathname + let endpointUrl + if (endpoint) { + endpointUrl = endpoint + } else { + if (region) { + endpointUrl = `https://s3.${region}.amazonaws.com` + } else { + endpointUrl = 'https://s3.us-east-1.amazonaws.com' + } + } + let sslEnabled = true + const endpointUrlObj = new URL(endpointUrl) + sslEnabled = endpointUrlObj.protocol === 'https:' + const client = new S3({ + accessKeyId: accessKeyID, + secretAccessKey, + endpoint: endpointUrl, + s3ForcePathStyle: pathStyleAccess, + sslEnabled, + region: region || 'us-east-1' + }) + const result = await client.deleteObject({ + Bucket: bucketName, + Key: fileKey.replace(/^\//, '') + }).promise() + return result.$response.httpResponse.statusCode === 204 + } catch (error) { + return false + } + } +} diff --git a/src/renderer/pages/Gallery.vue b/src/renderer/pages/Gallery.vue index 491764c..07d9cc9 100644 --- a/src/renderer/pages/Gallery.vue +++ b/src/renderer/pages/Gallery.vue @@ -424,7 +424,7 @@ function remove (item: ImgInfo) { }).then(async () => { const file = await $$db.getById(item.id!) await $$db.removeById(item.id!) - const picBedsCanbeDeleted = ['smms', 'github', 'imgur', 'tcyun', 'aliyun', 'qiniu', 'upyun'] + const picBedsCanbeDeleted = ['smms', 'github', 'imgur', 'tcyun', 'aliyun', 'qiniu', 'upyun', 'aws-s3'] if (await getConfig('settings.deleteCloudFile')) { if (item.type !== undefined && picBedsCanbeDeleted.includes(item.type)) { setTimeout(() => { diff --git a/yarn.lock b/yarn.lock index 3d20ffa..1218da6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3432,10 +3432,10 @@ available-typed-arrays@^1.0.5: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-sdk@^2.1304.0: - version "2.1304.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1304.0.tgz#92a57d96394185fbeb790a85e71c47154c1cd150" - integrity sha512-9mf2uafa2M9yFC5IlMe85TIc7OUo1HSProCQWzpRmAAYhcSwmfbRyt02Wtr5YSVvJJPmcSgcyI92snsQR1c3nw== +aws-sdk@^2.1317.0: + version "2.1317.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1317.0.tgz#b1534696b840654a55660eed467ed7ddbbb2e1d1" + integrity sha512-9gQ3ApcG4OhM19LEcmd/1jclwHvI3jjVaFYNQkY88g2eFJDW5T8qP+u2epdv+o3bPWxzg0TcyPhOSlN4xAnIJQ== dependencies: buffer "4.9.2" events "1.1.1"