Laravel:$ request-> hasFile()不工作在字符串上调用成员函数getClientOriginalExtension()

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

我正在使用laravel 5.6来使用HTML表单上传文件,但是我在控制器中检索文件时遇到了问题。

当我使用这种方式检索它时,它返回ok return $ request;它是在控制器中检索,但不是在hasFile()函数或getClientOriginalExtension()中检索

我搜索了很多网站,但问题仍然存在。所有我都匹配但没有工作。

错误:“在null上调用成员函数getClientOriginalExtension()”

Html表单视图:

<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');
}
php laravel-5 laravel-5.6 laravel-request
2个回答
0
投票

很难说这段代码的问题是什么。假设你真的这样发送(例如你没有在某处使用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');
}

0
投票

可能是您正在使用此声明使用Illuminate \ Support \ Facades \ Request;

而不是使用Illuminate \ Http \ Request;

© www.soinside.com 2019 - 2024. All rights reserved.