40 lines
1.4 KiB
JavaScript
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
|