Files
Imago-Vault/app/controllers/upload_controller.js
2026-05-04 14:16:59 +02:00

40 lines
1.4 KiB
JavaScript

import app from '@adonisjs/core/services/app';
const ALLOWED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'mp4', 'mov', 'avi', 'webm'];
const MAX_SIZE = '100mb';
export default class UploadController {
async store({ request, response }) {
const file = request.file('file', {
size: MAX_SIZE,
extnames: ALLOWED_EXTENSIONS,
});
if (!file) {
return response.badRequest({ success: false, message: 'No file provided.' });
}
if (!file.isValid) {
return response.unprocessableEntity({
success: false,
message: file.errors[0]?.message ?? 'File validation failed.',
errors: file.errors,
});
}
const safeName = file.clientName.replace(/[^a-zA-Z0-9._-]/g, '_');
const uniqueFilename = `${Date.now()}_${safeName}`;
await file.move(app.publicPath('uploads'), {
name: uniqueFilename,
overwrite: false,
});
if (file.hasErrors) {
return response.internalServerError({
success: false,
message: 'Could not save the file to disk.',
errors: file.errors,
});
}
return response.ok({
success: true,
filename: uniqueFilename,
url: `/uploads/${uniqueFilename}`,
});
}
}
//# sourceMappingURL=upload_controller.js.map