updates
This commit is contained in:
parent
c6b4c716a8
commit
9af9977749
|
|
@ -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',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,10 +22,47 @@ export default defineEventHandler(async (event) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete folder or file based on type
|
// Delete folder or file based on type
|
||||||
if (isFolder) {
|
if (targetBucket === 'client-portal') {
|
||||||
await deleteFolder(fileName);
|
// Use existing functions for default bucket
|
||||||
|
if (isFolder) {
|
||||||
|
await deleteFolder(fileName);
|
||||||
|
} else {
|
||||||
|
await deleteFile(fileName);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
await deleteFile(fileName);
|
// 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
|
||||||
|
|
|
||||||
|
|
@ -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';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue