diff --git a/components/file/fileController.js b/components/file/fileController.js index 76eb592..a4d31b3 100644 --- a/components/file/fileController.js +++ b/components/file/fileController.js @@ -2,6 +2,12 @@ const catchAsync = require('../../globalErrorHandler/catchAsync') const fileService = require('./fileService') exports.bucketSingleUpload = catchAsync(async (req, res, next) => { + if (!req.file) { + return res.status(400).json({ + status: 'fail', + message: 'No file uploaded' + }) + } const fileData = await fileService.bucketSingleUpload(req.file, req.params.bucketName) res.status(200).json({ @@ -71,7 +77,10 @@ exports.getImage = catchAsync(async (req, res, next) => { }); exports.bucketDeleteFile = catchAsync(async (req, res, next) => { - const { fileName } = await fileService.bucketDeleteFile(req.body, req.params.bucketName) + const rawTarget = typeof req.body === 'object' && req.body !== null + ? (req.body.fileName || req.body.url || req.body.data || '') + : (req.body || ''); + const { fileName } = await fileService.bucketDeleteFile(rawTarget, req.params.bucketName) res.status(200).json({ status: 'success', diff --git a/components/file/fileService.js b/components/file/fileService.js index 81bb843..fb4d39c 100644 --- a/components/file/fileService.js +++ b/components/file/fileService.js @@ -52,14 +52,26 @@ const bucketMultiUpload = async (files, bucketName) => { } const bucketDeleteFile = async (fileName, bucketName) => { - let exportedFileName = getLastUrlSegment(fileName) - await deleteObject(exportedFileName, bucketName) - await deleteFile(exportedFileName) + let raw = typeof fileName === 'object' && fileName !== null + ? (fileName.fileName || fileName.url || fileName.name || '') + : fileName + let exportedFileName = getLastUrlSegment(String(raw || '')) + if (exportedFileName) { + await deleteObject(exportedFileName, bucketName).catch((err) => { + console.error('Error deleting object from MinIO bucket:', err) + }) + await deleteFile(exportedFileName).catch((err) => { + console.error('Error deleting file record from DB:', err) + }) + } - return { fileName } + return { fileName: exportedFileName } } const getLastUrlSegment = (url) => { + if (!url || typeof url !== 'string') { + return '' + } if (!url.includes('/')) { return url }