Laravel: $request->hasFile() не работает Вызов функции-члена getClientOriginalExtension() для строки

Я работаю с laravel 5.6 для загрузки файла с использованием HTML-формы, но у меня возникла проблема при извлечении файла в контроллере.

Когда я получаю его таким образом, он возвращает ok return $request; он извлекается в контроллере, но не в функции hasFile() или getClientOriginalExtension()

Я искал много веб-сайтов, но проблема все еще остается здесь. Все у меня совпало, но не работает.

Ошибка: «Вызов функции-члена 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');
}

person hamza shan    schedule 25.08.2018    source источник
comment
var_dump($request->file('photo')) и посмотрим, что получится.   -  person nice_dev    schedule 25.08.2018
comment
братан он возвращает (NULL) он возвращает все время ноль не понятно почему??   -  person hamza shan    schedule 25.08.2018
comment
Что вы получите, если сделаете dd($request->all()) выше $image = $request->file('photo');?   -  person Rwd    schedule 25.08.2018
comment
файловый метод не найден   -  person hamza shan    schedule 27.08.2018


Ответы (2)


Глядя на этот фрагмент кода, действительно сложно сказать, в чем проблема. Предполагая, что вы действительно отправляете это так (например, вы где-то не используете 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');
}
person Marcin Nabiałek    schedule 25.08.2018
comment
спасибо, чувак, теперь это работает, но я не знаю, как !! ха-ха, я ничего не меняю, но шлепаю по клавиатуре и засыпаю, когда я снова включаю ноутбук, он действительно работает, я не делаю никаких изменений, даже очищаю кеш и т. Д. Я не знаю, почему. Но спасибо за ваши предложения. - person hamza shan; 27.08.2018

Возможно, вы используете этот оператор use Illuminate\Support\Facades\Request;

вместо использования Illuminate\Http\Request;

person CHARITRA SHRESTHA    schedule 28.08.2018