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

Laravel : $request->hasFile() is not working Call to a member function getClientOriginalExtension() on string

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

当我用这种方式检索它时 return没问题 return $request;它在控制器中检索但不在 hasFile() 函数中检索或 getClientOriginalExtension()

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

Error: "Call to a member function getClientOriginalExtension() on null"

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');
}

看这段代码真的很难说出什么问题。假设你真的像这样发送(例如你不在某处使用 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;