Bring back deleteFile removed upstream

This commit is contained in:
yu-i-i
2025-09-14 19:42:45 +02:00
parent a273f17ab5
commit 378dbf0dc8
2 changed files with 38 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ export default {
getFile, getFile,
getFileHead, getFileHead,
insertFile, insertFile,
deleteFile,
} }
function getFile(req, res, next) { function getFile(req, res, next) {
@@ -93,6 +94,22 @@ function getFile(req, res, next) {
}) })
} }
function deleteFile(req, res, next) {
metrics.inc('deleteFile')
const { key, bucket } = req
req.requestLogger.addFields({ key, bucket })
req.requestLogger.setMessage('deleting file')
FileHandler.deleteFile(bucket, key, function (err) {
if (err) {
next(err)
} else {
res.sendStatus(204)
}
})
}
function getFileHead(req, res, next) { function getFileHead(req, res, next) {
const { key, bucket } = req const { key, bucket } = req

View File

@@ -13,6 +13,7 @@ const { ConversionError, InvalidParametersError } = Errors
const FileHandler = { const FileHandler = {
insertFile: callbackify(insertFile), insertFile: callbackify(insertFile),
deleteFile: callbackify(deleteFile),
getFile: callbackify(getFile), getFile: callbackify(getFile),
getRedirectUrl: callbackify(getRedirectUrl), getRedirectUrl: callbackify(getRedirectUrl),
getFileSize: callbackify(getFileSize), getFileSize: callbackify(getFileSize),
@@ -20,6 +21,7 @@ const FileHandler = {
getFile, getFile,
getRedirectUrl, getRedirectUrl,
insertFile, insertFile,
deleteFile,
getFileSize, getFileSize,
}, },
} }
@@ -46,6 +48,25 @@ async function insertFile(bucket, key, stream) {
await PersistorManager.sendStream(bucket, key, stream) await PersistorManager.sendStream(bucket, key, stream)
} }
async function deleteFile(bucket, key) {
const convertedKey = KeyBuilder.getConvertedFolderKey(key)
if (!convertedKey.match(/^[0-9a-f]{24}\/([0-9a-f]{24}|v\/[0-9]+\/[a-z]+)/i)) {
throw new InvalidParametersError('key does not match validation regex', {
bucket,
key,
convertedKey,
})
}
const jobs = [PersistorManager.deleteObject(bucket, key)]
if (
Settings.enableConversions &&
bucket === Settings.filestore.stores.template_files
) {
jobs.push(PersistorManager.deleteDirectory(bucket, convertedKey))
}
await Promise.all(jobs)
}
async function getFile(bucket, key, opts) { async function getFile(bucket, key, opts) {
opts = opts || {} opts = opts || {}
if (!opts.format && !opts.style) { if (!opts.format && !opts.style) {