Laravel集合表单,如何上传多张图片?

4
我希望更改我的表单,使其能够一次上传多张图片,以下是我目前的代码:
表单中的部分内容:
{!! Form::open(['action' => 'PostsController@store', 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!}

{{Form::file('stock_image')}}

我的控制器:

if($request->hasFile('stock_image')){
        $filenameWithExt = $request->file('stock_image')->getClientOriginalName();
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        $extension = $request->file('stock_image')->getClientOriginalExtension();
        $fileNameToStore= $filename.'_'.time().'.'.$extension;
        $path = $request->file('stock_image')->storeAs('public/images', $fileNameToStore);
    } else {
        $fileNameToStore = 'noimage.jpg';
    }

感谢您的帮助!
2个回答

4

对于文件助手,您应使用非转义渲染:

{!! Form::file('stock_image') !!}

如果您想上传多个文件,只需使用多个输入字段即可。

{!! Form::file('stock_image_1') !!}
{!! Form::file('stock_image_2') !!}
{!! Form::file('stock_image_3') !!}

如果你想把它们放到一个数组中,可以使用以下语法:
{!! Form::file('stock_image[]') !!}
{!! Form::file('stock_image[]') !!}
{!! Form::file('stock_image[]') !!}

如果您想处理最后一个,可以按照以下步骤进行:
另一个提示:您可以使用'files' => true选项代替手动设置enctype的Form :: open()方法。这是一个辅助选项。

好的,谢谢!那么在控制器中,我需要复制所有内容并将其更改为“stock_image_2”等,还是可以一次性包含所有内容?(我很新手后端)谢谢 - user8244498
如果您使用第二个选项,即方括号。当您键入$request->file('stock_image')时,您将获得一个文件数组(注意:如果您以这种方式操作,我建议将名称更改为stock_images)。 - Mark Walet
这种方法违反了DRY原则。而且如果您想稍后上传更多文件,还需要更改代码。有更好的方法 - 使用“multiple”属性。请参阅我的答案。 - Yaroslav

1
您可以为文件输入设置multiple属性,以便用户一次选择多个文件,例如:
{!! Form::file('stock_image[]', ['multiple' => true]) !!}

然后从输入中获取您的stock_image,检查它是否为数组,并将文件保存代码块放入foreach中。
不要忘记在文件输入末尾命名为[]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接