Some checks failed
Build and Push App / build (push) Failing after 11m28s
maj url photo + page 404 + gestion programmation d'article
43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
'use server';
|
|
|
|
import { writeFile, mkdir } from 'fs/promises';
|
|
import { join } from 'path';
|
|
|
|
export async function uploadImage(formData: FormData) {
|
|
try {
|
|
const file = formData.get('file') as File;
|
|
if (!file) {
|
|
return { success: false, error: 'Aucun fichier fourni' };
|
|
}
|
|
|
|
const bytes = await file.arrayBuffer();
|
|
const buffer = Buffer.from(bytes);
|
|
|
|
// Create a unique filename
|
|
const fileExtension = file.name.split('.').pop();
|
|
const fileName = `${Date.now()}-${Math.random().toString(36).substring(2, 9)}.${fileExtension}`;
|
|
|
|
// Path for the ROOT public/uploads (where the main site will look)
|
|
const rootPublicDir = join(process.cwd(), '..', 'public', 'uploads');
|
|
// Path for the ADMIN public/uploads (where the admin app can see it for preview)
|
|
const adminPublicDir = join(process.cwd(), 'public', 'uploads');
|
|
|
|
// Ensure both directories exist
|
|
await mkdir(rootPublicDir, { recursive: true });
|
|
await mkdir(adminPublicDir, { recursive: true });
|
|
|
|
// Save to both
|
|
await writeFile(join(rootPublicDir, fileName), buffer);
|
|
await writeFile(join(adminPublicDir, fileName), buffer);
|
|
|
|
// Return the relative URL
|
|
return {
|
|
success: true,
|
|
url: `/uploads/${fileName}`
|
|
};
|
|
} catch (error) {
|
|
console.error('Error during image upload:', error);
|
|
return { success: false, error: 'Erreur lors de l\'upload de l\'image' };
|
|
}
|
|
}
|