Bonjour,
Je suis en fin de dev. d'un module ou je pourrais ajouter des voitures a vendre.
Chaque voitures peut avoir X images..
Les liens entre les models sont fait et ok.
Le code fonctionne a un point pret...
L'upload d'une ou plusieurs petites images ce passe tres bien. La page est rechargé en quelques petites secondes, les images sont redimensionnées en 2 tailles, dans leurs bons répertoires, etc...
Mon probleme est que, des que j'envoi une image en .jpg de 4Mo (et non, pas possible de redimensionner avant), le tout ce passe bien MAIIIIISSSSSS, le traitement prend entre 20 et 30 secondes par image, minimum...
L'idée est de pouvoir traiter plusieurs images en même temps.
J'ai testé avec 20 images... On arrive a plus de 10minutes avant que je site soit accessible.
(test chronometré :) )
Pour ce faire, j'utilise:
- Laravel 5.4
- Intervension Image
- Apache
- Un serveur KIMSUFI avec Debian
Pour aider a la compréhension, voici le code...
Le controller -> Update
public function update(updateAgence $request, $id)
{
$voiture = Agence::findOrFail($id);
$requestVoiture = $request->except('_token', 'images');
$voiture->update($requestVoiture);
// Gestion des uploads et sauvegarde en base
$requestImages = $request->file('images');
if ( $requestImages ){
$this->uploadImage($requestImages, $voiture);
}
$message= ['erreur', 'Un problème est survenu lors des modifications'];
if( $requestVoiture ){
$message = ['succes', "Modifications effectuées"];
}
return redirect()->route('agence.edit', $voiture)->with($message);
}
La function d'upload d'image(s) et sauvegarde en base
private function uploadImage($requestImages, $voiture)
{
$chemin = public_path() . "/img/agence/$voiture->id/";
$cheminMin = public_path() . "/img/agence/$voiture->id/thumbs/";
// Créer répertoires si besoin
if (!File::exists(public_path("/img/agence/$voiture->id/thumbs/"))) {
File::makeDirectory(public_path("/img/agence/$voiture->id/thumbs/"), 0777, true);
}
// Boucle sur les images postées
foreach ($requestImages as $requestImage) {
$image = $requestImage;
// Récupérer l'extension de l'image
$ext = $image->getClientOriginalExtension();
//Créer un nom via un id unique pour l'image
$imageNom = uniqid();
ImageStatic::make($image->getRealPath())
->fit(180, 120)
->save($cheminMin . $imageNom . '.' . $ext);
ImageStatic::make($image->getRealPath())
->fit(428, 285)
->save($chemin . $imageNom . '.' . $ext);
// Sauvegarde en base
$newImage = new Image();
$newImage->nom = $imageNom . '.' . $ext;
$newImage->agence_id = $voiture->id;
// Vérifier si il existe déja une image principale et traitement
$newImage->principale = 0;
if( Image::where('agence_id', $voiture->id)->where('principale', true)->count() == 0 ){
$newImage->principale = true;
}
$voiture->images()->save($newImage);
}
return true;
}
Oui, je sais, la ligne " $image = $requestImage; " ne sert a rien.. je modifierai ca une fois que j'aurai trouvé une solution :)
Je comprends bien que l'envoi des images sur le serveur peut prendre du temps mais, de la a attendre aussi longtemps pour le traitement, j'imagine qu'il y a un soucis quelque part que j'ai pas vu....
Enfin, merci d'avance :)