在laravel中保存多个图像

时间:2017-12-08 06:14:51

标签: laravel laravel-5

我试图将数组中的多个图像保存到数据库中,但我正在努力解决这个问题。我设法能够将多个图像上传到文件夹而不是数据库。

我的控制器

public function store(Request $request)
{

    $content = new Content();

    $request->validate($this->getRules());

    $content->fill($this->getSafeInput($request));

    if($request->hasFile('image'))
    {
        foreach($request->file('image') as $image)
        {
            $destinationPath = 'content_images/';
            $filename = $image->getClientOriginalName();
            $image->move($destinationPath, $filename);
            $content->image = $filename;

        }

    }

    $content->save();

    return redirect()->route('content.index');
}

我的表格

<div class="content-form">
    {{ Form::open(array('route' => 'content.store', 'method' => 'post','files'=>'true' )) }}
        {{ csrf_field() }}

        <div class="form-group">
            <label for="title">Title</label>
            <input type="text" id="title" class="form-control" name="title">
        </div>

        <div class="form-group">
            <input type="file" name="image[]" multiple="multiple">
        </div>

        <input type="submit" class="btn btn-primary" value="Submit"></input>
    {{ Form::close() }}
</div>

2 个答案:

答案 0 :(得分:2)

您在每个图片保存上覆盖了$content->image的值,因此最终您的$content->image将只包含最后一张图片的名称。

这样做:

if($request->hasFile('image'))
{
    $names = [];
    foreach($request->file('image') as $image)
    {
        $destinationPath = 'content_images/';
        $filename = $image->getClientOriginalName();
        $image->move($destinationPath, $filename);
        array_push($names, $filename);          

    }
    $content->image = json_encode($names)
}

此处图像名称最初存储在一个数组中,稍后该数组将以json格式保存到db中。这样你以后可以通过json_decode访问它们,然后你就可以恢复你的名字了!

答案 1 :(得分:0)

如果要保存由&#39;;&#39;分隔的图像的路线?你可以做点什么

public function store(Request $request)
{

$content = new Content();

$request->validate($this->getRules());

$content->fill($this->getSafeInput($request));

$allImages = null;

if($request->hasFile('image'))
{
    foreach($request->file('image') as $image)
    {
        $destinationPath = 'content_images/';
        $filename = $image->getClientOriginalName();
        $image->move($destinationPath, $filename);
        $fullPath = $destinationPath . $filename;
        $allImages .= $allImages == null ? $fullPath : ';' . $fullPath;
    }

    $content->image = $allImages;

}

$content->save();

return redirect()->route('content.index');
}

这应该使$allImages成为保存图像的每个路径的字符串,然后将其全部保存在Content模型中。