Laravel 图片上传到数据库 [英] Laravel image upload to database

查看:100
本文介绍了Laravel 图片上传到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个函数是我用来存储一个新公司的函数:

公共函数库(Request $request){$file = $request->file('logo');$filename = 'company-logo-' .时间() .'.'.$file->getClientOriginalExtension();$path = $file->storeAs('public', $filename);dd($path);公司::创建(['名称' =>$request->name,'电子邮件' =>$request->email,'标志' =>$request->logo,'网站' =>$request->网站]);return redirect('/company/all');}

此视图是具有以下形式的视图:

@extends('layouts.app')@section('内容')<div class="card"><div class="card-body"><h4 class="card-title">创建公司</h4>

<div class="container"><div class="jumbotron"><ul class="list-group"><li class="list-group-item"><h3>输入公司信息:</h3><form action="{{ route('company.store') }}";enctype="mutlipart/form-data";方法=POST">@csrf<div class="form-group"><输入类型=文本"类=表单控制"名称=名称"占位符=公司名称"value={{ old('name') }}">

<div class="form-group"><输入类型=文本"类=表单控制"名称=电子邮件"占位符=电子邮件"value={{ old('email') }}">

<div class="form-group"><输入类=表单控件"类型=文件"名称=徽标">

<div class="form-group"><输入类=表单控件"类型=网址";名称=网站"占位符=网站"value={{ old('website') }}">

<button class="btn btn-primary";type="submit">添加公司</button></表单>

@endsection

这是路线:

Route::post('/add', 'CompaniesController@store')->name('store');

好吧,当我尝试提交此表单时会发生什么 $file 变量总是以 null 返回:

错误在 null 上调用成员函数 getClientOriginalExtension()http://localhost:8000/company/add

基本上我想要做的是将图像的名称发送到数据库并将图像上传到我的公共文件夹.这段代码也不会发生.当我擦除从 $file 到 dd($path) 的部分时;它将值添加到数据库中,但图像尚未上传.

有什么帮助吗?提前致谢.

解决方案

首先你改变 enctype="multipart/form-data" 而不是 enctype="mutlipart/form-数据" 在您的表单中.然后将此代码放入您的控制器

公共函数库(Request $request){if($request->hasFile('logo')) {$img_ext = $request->file('logo')->getClientOriginalExtension();$filename = 'company-logo-' .时间() .'.'.$img_ext;$path = $request->file('logo')->move(public_path(), $filename);//图片保存公共文件夹}//你应该只在db中存储文件名而不是路径公司::创建(['名称' =>$request->name,'电子邮件' =>$request->email,'标志' =>$文件名,'网站' =>$request->网站]);return redirect('/company/all');}

This function is the function I use to store a new company:

public function store(Request $request)
{   

    $file = $request->file('logo');
    $filename = 'company-logo-' . time() . '.' . $file->getClientOriginalExtension();
    $path = $file->storeAs('public', $filename);
    dd($path);            

    Company::create([
        'name' => $request->name,
        'email' => $request->email,
        'logo' => $request->logo,
        'website' => $request->website
    ]);

    return redirect('/company/all');
}

This view is the one with the form:

@extends('layouts.app')

@section('content')
    <div class="card">
        <div class="card-body">
            <h4 class="card-title">Create a Company</h4>
        </div>

        <div class="container">
            <div class="jumbotron">
                <ul class="list-group">
                    <li class="list-group-item">
                        <h3>Enter Company Information:</h3>
                        <form action="{{ route('company.store') }}" enctype="mutlipart/form-data" method="POST">
                            @csrf
                            <div class="form-group">
                                <input type="text" class="form-control" name="name" placeholder="Company name" value="{{ old('name') }}">
                            </div>
                            <div class="form-group">
                                <input type="text" class="form-control" name="email" placeholder="Email" value="{{ old('email') }}">
                            </div>
                            <div class="form-group">
                                <input class="form-control" type="file" name="logo">
                            </div>
                            <div class="form-group">
                                <input class="form-control" type="url" name="website" placeholder="Website" value="{{ old('website') }}">
                            </div>
                            <button class="btn btn-primary" type="submit">Add Company</button>
                        </form>
                    </li>
                </ul>
            </div>
        </div>
    </div>
@endsection

This is the route:

Route::post('/add', 'CompaniesController@store')->name('store');

Well, what happens when I try to submit this form is that $file variable always returned with null:

Error
Call to a member function getClientOriginalExtension() on null
http://localhost:8000/company/add

Basically what I want to do is send the name of the image to the database and upload the image to my public folder. Neither happens with this code. when I erase the part starting from $file till dd($path); it adds the values to the database but the image hasn't been uploaded.

Any help? Thanks in advance.

解决方案

First you change enctype="multipart/form-data" instead of enctype="mutlipart/form-data" in your form. Then put this code to your controller

public function store(Request $request)
{
  if($request->hasFile('logo')) {
    $img_ext = $request->file('logo')->getClientOriginalExtension();
    $filename = 'company-logo-' . time() . '.' . $img_ext;
    $path = $request->file('logo')->move(public_path(), $filename);//image save public folder
  }
  //You should store only filename not path in db
  Company::create([
    'name' => $request->name,
    'email' => $request->email,
    'logo' => $filename, 
    'website' => $request->website
  ]);

    return redirect('/company/all');
}

这篇关于Laravel 图片上传到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
PHP最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆