Laravel 5.1: 如何从三个不同的文件输入字段上传多个文件?
Laravel 5.1: How to upload multiple files from three different file input fields?
我有一个表单,用户应该至少 select 上传一个文件。我有三个这样的文件输入字段:
<div class="form-group col-lg-4">
{!! Form::label('file1', 'Select file 1', ['class' => 'control-label']) !!}
{!! Form::file('files[]', ['id'=>'file1']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file2', 'Select file 2', ['class' => 'control-label']) !!}
{!! Form::file('files[]', ['id'=>'file2']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file3', 'Select file 3', ['class' => 'control-label']) !!}
{!! Form::file('files[]', ['id'=>'file3']) !!}
</div>
我应该验证表单请求中至少存在一个文件和 MIME 类型。然后在相关表单控制器的store方法中,将原始文件名存储在对应的三个数据库字段(即file1,file2,file3)中。
我该如何实现?
经过一番搜索,我终于想出了一个解决方案。首先,我将视图修改为如下所示:
<div class="form-group col-lg-4">
{!! Form::label('file1', 'Select file 1', ['class' => 'control-label']) !!}
{!! Form::file('file1', ['id'=>'file1']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file2', 'Select file 2', ['class' => 'control-label']) !!}
{!! Form::file('file2', ['id'=>'file2']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file3', 'Select file 3', ['class' => 'control-label']) !!}
{!! Form::file('file3', ['id'=>'file3']) !!}
</div>
然后在控制器中我使用了您建议的代码:
$files =[];
if ($request->file('file1')) $files[] = $request->file('file1');
if ($request->file('file2')) $files[] = $request->file('file2');
if ($request->file('file3')) $files[] = $request->file('file3');
foreach ($files as $file)
{
if(!empty($file)){
$filename=$file->getClientOriginalName();
$file->move(
base_path().'/public/uploads/', $filename
);
}
}
我有一个表单,用户应该至少 select 上传一个文件。我有三个这样的文件输入字段:
<div class="form-group col-lg-4">
{!! Form::label('file1', 'Select file 1', ['class' => 'control-label']) !!}
{!! Form::file('files[]', ['id'=>'file1']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file2', 'Select file 2', ['class' => 'control-label']) !!}
{!! Form::file('files[]', ['id'=>'file2']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file3', 'Select file 3', ['class' => 'control-label']) !!}
{!! Form::file('files[]', ['id'=>'file3']) !!}
</div>
我应该验证表单请求中至少存在一个文件和 MIME 类型。然后在相关表单控制器的store方法中,将原始文件名存储在对应的三个数据库字段(即file1,file2,file3)中。
我该如何实现?
经过一番搜索,我终于想出了一个解决方案。首先,我将视图修改为如下所示:
<div class="form-group col-lg-4">
{!! Form::label('file1', 'Select file 1', ['class' => 'control-label']) !!}
{!! Form::file('file1', ['id'=>'file1']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file2', 'Select file 2', ['class' => 'control-label']) !!}
{!! Form::file('file2', ['id'=>'file2']) !!}
</div>
<div class="form-group col-lg-4">
{!! Form::label('file3', 'Select file 3', ['class' => 'control-label']) !!}
{!! Form::file('file3', ['id'=>'file3']) !!}
</div>
然后在控制器中我使用了您建议的代码:
$files =[];
if ($request->file('file1')) $files[] = $request->file('file1');
if ($request->file('file2')) $files[] = $request->file('file2');
if ($request->file('file3')) $files[] = $request->file('file3');
foreach ($files as $file)
{
if(!empty($file)){
$filename=$file->getClientOriginalName();
$file->move(
base_path().'/public/uploads/', $filename
);
}
}