From 5e6cc6ecb8f060608c9d073d5591bf7816bc1a5f Mon Sep 17 00:00:00 2001 From: cxymds Date: Mon, 31 Mar 2025 16:57:35 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20Delete=20Bucket=20=20must=20be?= =?UTF-8?q?=20empty=20bucket=20=20.=20=20resolved=20rustfs/s3-rustfs#281?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composables/useObject.ts | 14 +++++++++++++- pages/browser/index.vue | 8 ++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/composables/useObject.ts b/composables/useObject.ts index 6f8e72c..87b56ad 100644 --- a/composables/useObject.ts +++ b/composables/useObject.ts @@ -41,6 +41,18 @@ export function useObject({ bucket, region }: { bucket: string, region?: string return await $client.send(new DeleteObjectCommand(params)) } + const listObject = async (bucket:string,prefix :string| undefined = undefined,pageSize :number = 25) => { + const params = { + Bucket: bucket, + Prefix: prefix, + MaxKeys: pageSize , + Delimiter: "/", + } + + return await $client.send(new ListObjectsV2Command(params)) + } + + async function mapAllFiles(bucketName: string, prefix: string, callback: (fileKey: string) => void) { let isTruncated = true; let continuationToken: string | undefined = undefined; @@ -101,5 +113,5 @@ export function useObject({ bucket, region }: { bucket: string, region?: string return await $client.send(new DeleteObjectTaggingCommand(params)) } - return { headObject, putObject, deleteObject, getSignedUrl, mapAllFiles,getObjectTagging ,putObjectTagging,deleteObjectTagging} + return { headObject, putObject, deleteObject, getSignedUrl, mapAllFiles,listObject,getObjectTagging ,putObjectTagging,deleteObjectTagging} } diff --git a/pages/browser/index.vue b/pages/browser/index.vue index 1da3c71..ba3609d 100644 --- a/pages/browser/index.vue +++ b/pages/browser/index.vue @@ -154,6 +154,14 @@ const handleRowClick = (row: RowData,e: Event) => { const message = useMessage(); const deleteItem = async (row: RowData) => { +const objectApi = useObject({ bucket: row.Name}); + + const files = await objectApi.listObject(row.Name); + + if(files.KeyCount){ + message.error("当前桶不为空,请先删除桶内容") + return + } deleteBucket(row.Name).then(()=>{ message.success("删除成功") refresh();