J'ai cette fonction dans mon contrôleur:

use File;
use Image; //image intervention library
...
public function upload(Request $request)
    {
        //make sure there is a folder in public with the username
        $username = Auth::user()->name;
        $folderpath = public_path('images/' . $username . '/');
        File::makeDirectory($folderpath, $mode = 0777, true, true);

        $files = $request->file;

        if(!empty($files)):
            foreach($files as $file):
                $filename = 'post_' . time() . '.' . $file->getClientOriginalExtension();
                $path = $folderpath . $filename;
                Image::make($file)->resize(800,400)->save($path);
            endforeach;
        endif;

        return 'success';
    }

Qui ne sauvegarde la dernière image que si j'en télécharge plusieurs.

Et j'ai essayé:

public function upload(Request $request)
    {
        //make sure there is a folder in public with the username
        $username = Auth::user()->name;
        $folderpath = public_path('images/' . $username . '/');
        File::makeDirectory($folderpath, $mode = 0777, true, true);

        $files = $request->file;

        if(!empty($files)):
            foreach($files as $file):
                $filename = 'post_' . time() . '.' . $file->getClientOriginalExtension();
                $path = $folderpath . $filename;
                $file->save($path);
            endforeach;
        endif;

        return ''success;
    }

Qui me jette une erreur:

La sauvegarde de la méthode n'existe pas.

J'ai regardé et il semble que je ne l'ai pas instancié avec le modèle. Mais dans ce cas, comment puis-je l'instancier avec model s'il ne s'agit que d'un téléchargement direct de fichiers?

Quelle est la meilleure façon de télécharger plusieurs images dans laravel?

Mettre à jour

Après avoir lu la réponse de @ kunal, j'ai réussi à résoudre le problème en ajoutant un numéro unique pour le nom du fichier:

public function upload(Request $request)
    {
        //make sure there is a folder in public with the username
        $username = Auth::user()->name;
        $folderpath = public_path('images/' . $username . '/');
        File::makeDirectory($folderpath, $mode = 0777, true, true);

        $files = $request->file;
        $count = 0;//<-- add a counter
        if(!empty($files)):
            foreach($files as $file):
                $filename = 'post_' . time() . '_' . $count . '.' . $file->getClientOriginalExtension();//<-- add counter to the file name
                $path = $folderpath . $filename;
                Image::make($file)->resize(800,400)->save($path);
                $count ++;//<-- increase the value
            endforeach;
        endif;

        return 'success';
    }
0
sooon 15 nov. 2017 à 07:33

4 réponses

Meilleure réponse

Peut-être cherchez-vous ce genre de choses: -

if ($request->hasFile('files')) {
$files = $request->file('files');
foreach($files as $file){
    $extension = $file->getClientOriginalExtension();
    $fileName = str_random(5)."-".date('his')."-".str_random(3).".".$extension;
    $folderpath  = 'images'.'/';
    $file->move($folderpath , $fileName);
}
}
<input type="file" id="gallery" name="files[]" multiple />
1
kunal 15 nov. 2017 à 05:02

Ce n'est pas si compliqué. À partir de la larve 5.8, vous pouvez faire ceci:

collect($request->images)->each(function ($image) {
    return $image->store('images', 'public');
});

Il met les images dans le dossier images du disque public.

0
ajuchacko91 14 juil. 2019 à 11:06

Essayez ce code:

$files= Input::file('image');
$destinationPath= 'images';
$images=array(); 
foreach($files as $file){
    $fullname= $file->getClientOriginalName(); 
    $hashname  = $fullname; 
    $upload_success   =$file->move($destinationPath, $hashname);
    $images[]=$fullname;
    $has= implode(",",$images);
}
$modelname= new Modelname;
$modelname->image_attachment    =  $has;  
$modelname->save();

Et votre page html:

<input type="file" id="image" name="image[]" />
1
masud_moni 9 avril 2018 à 11:33

Je pense que tu as peut-être raté cette partie

<input type="file" id="gallery" name="file[]" />

Notez que le file[] doit être un tableau sinon ce sera only save the last image if upload multiple image

Si votre partie html est correcte, utilisez comme ceci,

foreach ($file as $photo) {
    $path = Storage::putFile('foldername', $photo);
}
1
arun 15 nov. 2017 à 04:52
47299407