php - 无法在 Laravel 5.4 中上传图片

标签 php laravel laravel-5 laravel-5.4 intervention

使用 Laravel 5.4,我想设置一个表单,用户可以在其中输入食物名称及其图像。在尝试上传 PNG 或 JPG 图像时,我得到以下 Validation Error :

The image must be an image.



如果我删除图像验证,我会得到一个 FatalErrorException :

Call to a member function getClientOriginalExtension() on null



这是 Intervention/Image 库提供的辅助函数。这可能意味着图像根本没有上传。

FORM
<form action="/hq/foods" method="POST">
    {{ csrf_field()  }}

    <input type="text" name="name">
    <input type="file" name="image">
    <button type="submit" class="btn btn-success ">
        ADD FOOD ITEM
    </button>
</form>

CONTROLLER
public function store(Request $request) {

    $this->validate($request, [
        'name'              => 'required|min:2|max:255',
        'image'             => 'required|image'
    ]);

    $food_category = FoodCategory::find($request->food_category_id);
    $food = new Food;
    $food->name = $request->name;

    $image = $request->file('image');
    $filename = time() . '.' . $image->getClientOriginalExtension();
    $location = public_path('img/foods/' . $filename);
    Image::make($image)->resize(800, 400)->save($location);
    $food->image = $filename;

    $food->save();

    Session::flash('success',
        '
        <h4>Success!</h4>
        <p>The food item has been added to the Menu.</p>
    ');
    return back();
}

我错过了什么?

最佳答案

要上传图片,您需要添加:

enctype="multipart/form-data"

到您的表单而不是:
<form action="/hq/foods" method="POST">

你应该使用
<form action="/hq/foods" method="POST" enctype="multipart/form-data">

关于php - 无法在 Laravel 5.4 中上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42736215/

相关文章:

php - 从 Telegram channel 获取我不是管理员的消息

php - Laravel 中的碳意外日期时间格式

javascript - 通过 AJAX 发送 JS 数组到 laravel 不起作用

php - Laravel 5 验证唯一(数据库)仅适用于相同的外键

php - Laravel 中间件不存储 session 值

php - 在 docker 容器中为 php 启用 soap

php - Mysql更新字段与其他字段

javascript - 根据搜索条件在 ajax POST 后刷新表

php - Laravel 5.2 注册时添加动态下拉列表

php - 更新 laravel Controller 中的复选框