使用Laravel中的2个输入文件上传多个图像文件

问题描述 投票:0回答:2

我想使用Laravel中的2个输入文件字段上载多个图像,并将这2个文件放入具有不同属性(imagepath1, imagepath2)的DB中。如果我尝试该代码,则两者都输入并上传相同的文件,例如imagekitchen2(两者都发生了变化,但imagepath1变为imagepath2,而imagepath2仍为imagepath2)。

Controller

public function store(Request $request)
{
    $kitchens = new Kitchen();
    $kitchens->title = $request->input('title-kitchen');
    $kitchens->description = $request->input('description-kitchen');
    if ($request->hasfile('imagekitchen1')) {
        $file = $request->file('imagekitchen1');
        $extension = $file->getClientOriginalExtension();
        $filename = time().'.'.$extension;
        $file->move('uploads/product/kitchen/', $filename);
        $kitchens->imagepath1 = $filename;
    } else {
        $kitchens->imagepath1 = '';
    }

    $kitchens->save();
    if ($request->hasfile('imagekitchen2')) {
        $file = $request->file('imagekitchen2');
        $extension = $file->getClientOriginalExtension();
        $filename = time().'.'.$extension;
        $file->move('uploads/product/kitchen/', $filename);
        $kitchens->imagepath2 = $filename;
    } else {
        $kitchens->imagepath2 = '';
    }

    $kitchens->save();
}

查看

<div class="card-body">
    <div class="row">
        <div class="col-md-6">
            <form action="{{ route('addimagekitchen') }}" enctype="multipart/form-data" method="POST">
                {{ csrf_field() }}
                <div class="form-group">
                    <label>Title</label>
                    <label>
                        <input type="text" name="title-kitchen" class="form-control">
                    </label>
                </div>
                <div class="input-group">
                    <div class="custom-file">
                        <label for="image" style="display: block">Main image</label> <br/>
                        <input type="file" name="imagekitchen1" style="margin-left: 20px">
                    </div>
                </div>
                <div class="input-group">
                    <div class="custom-file">
                        <label for="image" style="display: block">Second image</label> <br/>
                        <input type="file" name="imagekitchen2" style="margin-left: 20px">
                    </div>
                </div>
                <div class="input-group">
                    <div class="custom-file">
                        <label for="image" style="display: block">Third image</label> <br/>
                        <input type="file" name="imagekitchen[]" style="margin-left: 20px">
                    </div>
                </div>
                <div class="form-group">
                    <label>Description</label>
                    <textarea class="form-control" name="description-kitchen" id="description-kitchen"
                              rows="3"></textarea>
                </div>
                <button type="submit" class="btn btn-success"> Insert</button>
                <a href="/kitchen-admin" class="btn btn-danger"> Cancel </a>
            </form>
        </div>
    </div>
</div>
laravel file-upload upload image-uploading laravel-6
2个回答
0
投票

我不确定您的意思,但您可能应该更改:

$kitchens->save();
if($request->hasfile('imagekitchen2')){

进入

$kitchens->save();

$kitchens = new Kitchen(); 
if($request->hasfile('imagekitchen2')){

这样,您将创建2条记录,否则您使用相同的对象并在创建后对其进行更新。根据您的需要,您可能还需要添加:

$kitchens->title = $request->input('title-kitchen');
$kitchens->description = $request->input('description-kitchen');

之前:

if($request->hasfile('imagekitchen2')){

如果要为两个记录保存相同的标题和描述。

当然,我不确定如果没有文件,是否要创建记录-如果没有文件上传,目前两者都将被保存。


0
投票

尝试一下

尝试一下

public function store(Request $request)
{
    $kitchens = new Kitchen();
    $kitchens->title = $request->input('title-kitchen');
    $kitchens->description = $request->input('description-kitchen');
    if ($request->hasfile('imagekitchen1')) {
        $file = $request->file('imagekitchen1');
        $extension = $file->getClientOriginalExtension();
        $filename = time().'.'.$extension;
        $file->move('uploads/product/kitchen/', $filename);
        $kitchens->imagepath1 = $filename;
    } else {
        $kitchens->imagepath1 = '';
    }

    $kitchens->save();

    if ($request->hasfile('imagekitchen2')) {
        $file = $request->file('imagekitchen2');
        $extension = $file->getClientOriginalExtension();
        $filename = time().'.'.$extension;
        $file->move('uploads/product/kitchen/', $filename);
        $kitchens->imagepath2 = $filename;
    } else {
        $kitchens->imagepath2 = '';
    }

    $kitchens->save();

    $datas = [];
    $result = [];
    if ($request->hasfile('imagekitchen')) {
        foreach ($request->file('imagekitchen') as $key => $file) {
            $name = $file->getClientOriginalName();
            $file->move(public_path() . '/uploads/product/kitchen/', $name);
            $datas[$key] = $name;
            $file = new Kitchen();
            foreach ($datas as $data) {
                $file->imagekitchen = implode (", ", $data);

                $file->save();
        }
}       
© www.soinside.com 2019 - 2024. All rights reserved.