From 4579b35fe070b248e18200831e453dbd41e37994 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 10 Jun 2025 15:33:01 +0200 Subject: [PATCH] updates --- pages/dashboard/file-browser.vue | 7 ++-- server/api/files/test-delete.ts | 59 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 server/api/files/test-delete.ts diff --git a/pages/dashboard/file-browser.vue b/pages/dashboard/file-browser.vue index fbc6172..56f33e6 100644 --- a/pages/dashboard/file-browser.vue +++ b/pages/dashboard/file-browser.vue @@ -623,13 +623,15 @@ const downloadFile = async (file: FileItem) => { // Check if Safari (iOS or desktop) const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + const bucket = file.bucket || 'client-portal'; + if (isSafari) { // For Safari, open in new window to force proper filename handling - const downloadUrl = `/api/files/proxy-download?fileName=${encodeURIComponent(file.name)}`; + const downloadUrl = `/api/files/proxy-download?fileName=${encodeURIComponent(file.name)}&bucket=${bucket}`; window.location.href = downloadUrl; } else { // For other browsers, use blob approach - const response = await fetch(`/api/files/proxy-download?fileName=${encodeURIComponent(file.name)}`); + const response = await fetch(`/api/files/proxy-download?fileName=${encodeURIComponent(file.name)}&bucket=${bucket}`); if (!response.ok) { throw new Error('Failed to download file'); @@ -714,6 +716,7 @@ const deleteSelected = async () => { body: { fileName: item.name, isFolder: item.isFolder, + bucket: item.bucket || 'client-portal', }, }); successCount++; diff --git a/server/api/files/test-delete.ts b/server/api/files/test-delete.ts new file mode 100644 index 0000000..4b40399 --- /dev/null +++ b/server/api/files/test-delete.ts @@ -0,0 +1,59 @@ +export default defineEventHandler(async (event) => { + try { + const { fileName, bucket } = getQuery(event); + + if (!fileName || !bucket) { + return { + success: false, + error: 'Missing fileName or bucket parameter' + }; + } + + console.log('[test-delete] Attempting to delete:', { + fileName: fileName as string, + bucket: bucket as string + }); + + // Import MinIO client + const { getMinioClient } = await import('~/server/utils/minio'); + const client = getMinioClient(); + + // Check if file exists first + try { + const stat = await client.statObject(bucket as string, fileName as string); + console.log('[test-delete] File exists:', stat); + } catch (error: any) { + console.error('[test-delete] File not found:', error.message); + return { + success: false, + error: 'File not found in bucket', + details: error.message + }; + } + + // Try to delete the file + try { + await client.removeObject(bucket as string, fileName as string); + console.log('[test-delete] File deleted successfully'); + + return { + success: true, + message: 'File deleted successfully' + }; + } catch (error: any) { + console.error('[test-delete] Delete failed:', error); + return { + success: false, + error: 'Failed to delete file', + details: error.message + }; + } + } catch (error: any) { + console.error('[test-delete] Unexpected error:', error); + return { + success: false, + error: 'Unexpected error', + details: error.message + }; + } +});