How to upload multiple images and store their name in database with laravel 5.1?

≯℡__Kan透↙ 提交于 2019-12-25 04:49:09

问题


I have created a form for users can upload multiple images,and move uploaded images to 'Upload' folder and store their names in database. This is my code

public function multiple_upload() {
    $multiupload = new Multiupload();
// getting all of the post data
$files = Input::file('images');
// Making counting of uploaded images
$file_count = count($files);
// start count how many uploaded
$uploadcount = 0;
foreach($files as $file) {
  $rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc'
  $validator = Validator::make(array('file'=> $file), $rules);
  if($validator->passes()){
    $destinationPath = 'uploads';
    $filename = $file->getClientOriginalName();
    $upload_success = $file->move($destinationPath, $filename);
    $uploadcount ++;
    $multiupload->fileimage = $filename;
    $multiupload->save();
  }
}
if($uploadcount == $file_count){
  Session::flash('success', 'Upload successfully'); 
  return Redirect::to('/');
} 
else {
  return Redirect::to('/')->withInput()->withErrors($validator);
}

}

After upload all images successfully move to 'Uploads' folder but, in database it store only one image name. So how to store all images name in database? Please help me and thanks you for help.


回答1:


As @edrzej.kurylo said

You have to add the below line to inside of foreach($files as $file) {

$multiupload = new Multiupload();

Because you are reusing the same Multiupload function again and again. You have to re initialize the Model for every time the loop runs.




回答2:


The reason is that you are reusing the same Multiupload instance in your loop and just overwriting the saved name with the name of next file. You should be creating a new Multiupload instance for every file that gets uploaded.




回答3:


You should move your $multiupload = new Multiupload(); into the foreach loop.

foreach($files as $file) {
   $multiupload = new Multiupload();
}



回答4:


I would use for loop in this manner:

if($request->hasFile('images'){
    $files = $request->file('images');
    for($i=0; $i<count($files); $i++){
        $img = new SampleImage();
        $name = rand().'.'.$files[$i]->getClientOriginalExtension();
        $files[$i]->move('uploads/samples/',$name);
        $img->image_name = $name;
        $img->save();
    }
}


来源:https://stackoverflow.com/questions/31468120/how-to-upload-multiple-images-and-store-their-name-in-database-with-laravel-5-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!