Laravel 5.2 中的多张图片上传

Posted

技术标签:

【中文标题】Laravel 5.2 中的多张图片上传【英文标题】:Multiple Image Upload in Laravel 5.2 【发布时间】:2016-08-18 08:37:14 【问题描述】:

我终于可以上传和移动图片了,但现在我想在 Laravel 上创建多个上传图片。那可能吗?我必须使用数组来制作它吗?

我可以稍微修改一下这段代码吗?

它在我的 ProductController.php

$picture = '';

if ($request->hasFile('images')) 
    $file = $request->file('images');
    $filename = $file->getClientOriginalName();
    $extension = $file->getClientOriginalExtension();
    $picture = date('His').$filename;
    $destinationPath = base_path() . '\public\images/';
    $request->file('images')->move($destinationPath, $picture);


if (!empty($product['images'])) 
    $product['images'] = $picture;
 else 
    unset($product['images']);

谢谢。 注意:我上面的代码来自***上的一个好心人,再次感谢;)

【问题讨论】:

【参考方案1】:

在您的前端表单中,您必须使用您的字段属性名称,例如

name="images[]"

你的控制器代码会是这样的。

$picture = '';
if ($request->hasFile('images')) 
    $files = $request->file('images');
    foreach($files as $file)
        $filename = $file->getClientOriginalName();
        $extension = $file->getClientOriginalExtension();
        $picture = date('His').$filename;
        $destinationPath = base_path() . '\public\images';
        $file->move($destinationPath, $picture);
    


if (!empty($product['images'])) 
    $product['images'] = $picture;
 else 
    unset($product['images']);

【讨论】:

如果我需要在数据库的不同字段中上传不同的图像怎么办?表示字段名称不同,其中<input> 名称也不同,比方说! 可以通过以下方式改进:$destinationPath = public_path('images');【参考方案2】:

您来自 $_POST 的输入将作为数组传入。您需要做的就是遍历它:

$picture = '';

if ($request->hasFile('images')) 
    $files = $request->file('images');
    foreach($files as $file)
        $filename = $file->getClientOriginalName();
        $extension = $file->getClientOriginalExtension();
        $picture = date('His').$filename;
        $destinationPath = base_path() . '\public\images/';
        $request->file('images')->move($destinationPath, $picture);
    

【讨论】:

关于表单,我必须使用name="images[]" 还是像name="images1"name="images2"name="images3" 我的数据库中好像已经记录了图片的临时名称,但是移动失败了。【参考方案3】:

稍微修改代码即可上传多张图片。

 public function store(Request $request)
 
         $pid = $request->input('pid');
         $input = $request->file('images');

         $picture = array();
         if($request->hasFile('images')) :
            foreach ($input as $item):
              $extension = $item->getClientOriginalName();
              $name = date('Ymd') . '.' . $extension;
              $destinationPath = base_path() . '/uploads/images/';
              $item->move($destinationPath, $name);
              $arr[] = $name;
            endforeach;
            $picture = implode(",", $arr);
         else:
            $picture = '';
         endif;

         DB::table('document')->insert(array('pid' => $pid,'image' => $picture)); 
         Session::flash('message', 'Multiple pictures are uploaded successfully');
         return redirect('/image-upload');
 

【讨论】:

以上是关于Laravel 5.2 中的多张图片上传的主要内容,如果未能解决你的问题,请参考以下文章

laravel 8中多张图片上传的问题

Laravel Vue 多张图片上传失败,每个图片都有一个 NULL 值

Laravel 4 上传 1 张图片并保存为多张 (3)

带删除和预览的多张图片上传 Laravel

Laravel 8,如何一次上传多张图片

Connection.php 第 729 行中的 QueryException:SQLSTATE[23000]:Laravel 5.2