This commit is contained in:
Matt 2025-06-10 15:27:57 +02:00
parent c6b4c716a8
commit 9af9977749
3 changed files with 50 additions and 6 deletions

View File

@ -754,6 +754,7 @@ const deleteFile = async () => {
body: { body: {
fileName: fileToDelete.value.name, fileName: fileToDelete.value.name,
isFolder: fileToDelete.value.isFolder, isFolder: fileToDelete.value.isFolder,
bucket: fileToDelete.value.bucket || 'client-portal',
}, },
}); });

View File

@ -1,9 +1,10 @@
import { deleteFile, deleteFolder } from '~/server/utils/minio'; import { deleteFile, deleteFolder, getMinioClient } from '~/server/utils/minio';
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
try { try {
const body = await readBody(event); const body = await readBody(event);
const { fileName, isFolder } = body; const { fileName, isFolder, bucket } = body;
const targetBucket = bucket || 'client-portal';
if (!fileName) { if (!fileName) {
throw createError({ throw createError({
@ -21,11 +22,48 @@ export default defineEventHandler(async (event) => {
} }
// Delete folder or file based on type // Delete folder or file based on type
if (targetBucket === 'client-portal') {
// Use existing functions for default bucket
if (isFolder) { if (isFolder) {
await deleteFolder(fileName); await deleteFolder(fileName);
} else { } else {
await deleteFile(fileName); await deleteFile(fileName);
} }
} else {
// For other buckets, use MinIO client directly
const client = getMinioClient();
if (isFolder) {
// List all objects in the folder and delete them
const objectsList: string[] = [];
await new Promise((resolve, reject) => {
const stream = client.listObjectsV2(targetBucket, fileName, true);
stream.on('data', (obj) => {
if (obj && obj.name) {
objectsList.push(obj.name);
}
});
stream.on('error', reject);
stream.on('end', async () => {
try {
if (objectsList.length > 0) {
await client.removeObjects(targetBucket, objectsList);
}
resolve(true);
} catch (error) {
reject(error);
}
});
});
} else {
// Delete single file
await client.removeObject(targetBucket, fileName);
}
}
// Log audit event // Log audit event
await logAuditEvent(event, 'delete', fileName); await logAuditEvent(event, 'delete', fileName);

View File

@ -34,7 +34,12 @@ export default defineEventHandler(async (event) => {
const fileName = `${timestamp}-${sanitizedName}`; const fileName = `${timestamp}-${sanitizedName}`;
// Construct full path including current folder // Construct full path including current folder
const fullPath = currentPath ? `${currentPath}${fileName}` : fileName; // Ensure currentPath ends with / if it's a folder
let normalizedPath = currentPath;
if (normalizedPath && !normalizedPath.endsWith('/')) {
normalizedPath += '/';
}
const fullPath = normalizedPath ? `${normalizedPath}${fileName}` : fileName;
// Get content type // Get content type
const contentType = mime.lookup(uploadedFile.originalFilename || '') || 'application/octet-stream'; const contentType = mime.lookup(uploadedFile.originalFilename || '') || 'application/octet-stream';