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

Я работаю с 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');
}

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Может быть, вы используете это утверждение использовать Освещение \ Поддержка \ Фасады \ Запрос;

от использовать Illuminate \ Http \ Request;

0 голосов
/ 25 августа 2018

Трудно сказать, в чем проблема, глядя на этот кусок кода.Предполагая, что вы действительно отправляете это так (вы не используете 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');
}
...