我正在尝试通过Laravel 5.5中的HTML表单上传图像。我已经包含了enctype="multipart/form-data"
属性,但仍未发生任何事情。
表格代码:
<form method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group">
<label for="m_photo" class="col-md-4 control-label">Main photo</label>
<div class="col-md-6">
<input id="m_photo" type="file" class="form-control-file space" name="m_photo" required>
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
路由(web.php)代码:
Route::post('smartphones/entry', 'HomeController@s_submit')->name('s_submit');
控制器代码:
public function s_submit() {
if (Input::hasFile('m_photo')) {
// doing something
}
else {
echo 'Nothing happened';
}
}
'当我提交表格时,没有发生任何事情'。“
有趣的是,当我这样做时:
public function s_submit(Request $request) {
$input = Input::all();
dd($input);
}
我明白了:
array:1 [
"m_photo" => UploadedFile {#210 ▶}
]
就像图像 被传递一样,但我无法检索它。请帮忙。
答案 0 :(得分:3)
当PHP max_file_size未设置为允许发送您尝试上传的文件的大小时,可能会发生这种情况。这会导致hasFile
返回false,例如,file->getClientOriginalName()
有效。
尝试检查php.ini中的upload_max_filesize
或post_max_size
,或尝试使用较小的文件检查它是否有效。
答案 1 :(得分:1)
获取文件:
$file = $request->m_photo;
或者用:
$file = $request->file('m_photo');
https://laravel.com/docs/5.5/requests#retrieving-uploaded-files
答案 2 :(得分:1)
email
答案 3 :(得分:0)
试试这个:
public function s_submit()
{
request()->validate([
'm_photo' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$imageName = time().'.'.request()->m_photo->getClientOriginalExtension();
request()->m_photo->move(public_path('images'), $imageName);
return back()
->with('success','You have successfully upload image.')
->with('m_photo',$imageName);
}
刀片:
{!! Form::open(array('route' => 's_submit','files'=>true)) !!}
<div class="form-group">
<label for="m_photo" class="col-md-4 control-label">Main photo</label>
<div class="col-md-6">
{!! Form::file('m_photo', array('class' => 'form-control-file space')) !!}
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
{!! Form::close() !!}
答案 4 :(得分:0)
您忘记在html表单中添加操作:
put action =“/ smartphones / entry”或action =“{{route('s_submit')}}”
<form method="POST" enctype="multipart/form-data" action="{{route('s_submit')}}">
{{ csrf_field() }}
<div class="form-group">
<label for="m_photo" class="col-md-4 control-label">Main photo</label>
<div class="col-md-6">
<input id="m_photo" type="file" class="form-control-file space" name="m_photo" required>
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
控制器中的在公用文件夹中创建图像文件夹
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
public function s_submit(Request $request) {
if($request->hasFile('m_photo')){
$filenameWithExt=$request->file('m_photo')->getClientOriginalName();
$filename=pathinfo($filenameWithExt,PATHINFO_FILENAME);
$extension=$request->file('m_photo')->getClientOriginalExtension();
$fileNameToStore=$filename.'_'.time().'.'.$extension;
request()->m_photo->move(public_path('images'), $fileNameToStore);
}
else{
$fileNameToStore='noimage.jpg';
}
}
答案 5 :(得分:0)
对于将来的访客,可接受的答案是正确的答案。
我想再分享一件事。
我也面临类似的问题,我已经将upload_max_filesize
和post_max_size
变量设置为20M,这已经足够了。
但是我仍然面临这个问题。因此,我增加到500M,然后它起作用了。
真的很奇怪,因为我上传的文件小于1 MB。