fix(file): add file validation and robust payload parsing for bucket upload and delete
deploy-chabokan / deploy (push) Canceled after 0s
deploy-chabokan / deploy (push) Canceled after 0s
This commit is contained in:
@@ -2,6 +2,12 @@ const catchAsync = require('../../globalErrorHandler/catchAsync')
|
|||||||
const fileService = require('./fileService')
|
const fileService = require('./fileService')
|
||||||
|
|
||||||
exports.bucketSingleUpload = catchAsync(async (req, res, next) => {
|
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)
|
const fileData = await fileService.bucketSingleUpload(req.file, req.params.bucketName)
|
||||||
|
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
@@ -71,7 +77,10 @@ exports.getImage = catchAsync(async (req, res, next) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
exports.bucketDeleteFile = 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({
|
res.status(200).json({
|
||||||
status: 'success',
|
status: 'success',
|
||||||
|
|||||||
@@ -52,14 +52,26 @@ const bucketMultiUpload = async (files, bucketName) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const bucketDeleteFile = async (fileName, bucketName) => {
|
const bucketDeleteFile = async (fileName, bucketName) => {
|
||||||
let exportedFileName = getLastUrlSegment(fileName)
|
let raw = typeof fileName === 'object' && fileName !== null
|
||||||
await deleteObject(exportedFileName, bucketName)
|
? (fileName.fileName || fileName.url || fileName.name || '')
|
||||||
await deleteFile(exportedFileName)
|
: 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) => {
|
const getLastUrlSegment = (url) => {
|
||||||
|
if (!url || typeof url !== 'string') {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
if (!url.includes('/')) {
|
if (!url.includes('/')) {
|
||||||
return url
|
return url
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user