我正在使用laravel 5.6来使用HTML表单上传文件,但是我在控制器中检索文件时遇到了问题。
当我使用这种方式检索它时,它返回ok return $ request;它是在控制器中检索,但不是在hasFile()
函数或getClientOriginalExtension()
中检索
我搜索了很多网站,但问题仍然存在。所有我都匹配但没有工作。
错误:“在null上调用成员函数getClientOriginalExtension()”
<form action="{{url('/changeProductImage')}}" enctype="multipart/form-data" method="post">
{{csrf_field()}}
<input type="file" name="photo" id="photo" class="btn btn-secondary">
<hr>
<button type="submit" value="upload" class="form-control btn btn-primary btn-fill btn-lg">Upload Image</button>
</form>
Route::post('/changeProductImage','ProductsController@upload');
function upload(Request $request)
{
$image = $request->file('photo');
$new_name = rand() . '.' . $image->getClientOriginalExtension();
$image->move(public_path('images'), $new_name);
return back()->with('success', 'Image Uploaded Successfully');
}
很难说这段代码的问题是什么。假设你真的这样发送(例如你没有在某处使用AJAX),它应该可以工作。
我会做什么,我会确保在你的控制器中你有:
use Illuminate\Http\Request;
只是为了确保你在控制器中的这个请求真的是这个。
还要记住,你应该进行一些验证,以确保文件确实是你想要的类型,或者至少你应该有一些额外的逻辑,例如:
function upload(Request $request)
{
if (!$request->hasFile('photo') {
return back()->with('error', 'Missing image!');
}
$image = $request->file('photo');
$new_name = rand() . '.' . $image->getClientOriginalExtension();
$image->move(public_path('images'), $new_name);
return back()->with('success', 'Image Uploaded Successfully');
}
可能是您正在使用此声明使用Illuminate \ Support \ Facades \ Request;
而不是使用Illuminate \ Http \ Request;