如何使用Laravel上传图像?

时间:2019-01-03 16:58:37

标签: laravel image file path upload

问题:
我想使用Laravel将图像上传到mySQL数据库。

我尝试过的方法:
我在寻找其他堆栈溢出问题,但没有帮助。

我期望的结果:
就是将图像名称或路径保存到数据库中我的表的一列中,以供日后检索和显示为博客中的帖子。

3 个答案:

答案 0 :(得分:1)

首先,您需要在视图中使用表单(不要忘记csrf令牌):

<form action="/image-upload" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <button type="submit">Upload</button>
</form>

然后在您的路由文件中添加POST方法的路由:

Route::post('image-upload', 'ImageUploadController@imageUploadPost');

然后在Controller上创建一个函数,该函数将验证图像并将其移动到“ public / images”文件夹。

public function imageUploadPost()
{
    request()->validate([
        'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $imageName = time().'.'.request()->image->getClientOriginalExtension();
    request()->image->move(public_path('images'), $imageName);
}

有关更好的解决方案,请阅读:Laravel File Storage

答案 1 :(得分:1)

实际上,对于Laravel,它只涉及几行代码。假设您有一个具有化身的用户,该化身存储在数据库中。这是从数据库存储和检索化身的方法:

1。。首先,您需要在users表中具有一个化身列,该列可以存储二进制数据。根据您要允许头像图像的大小,列的数据类型可以是以下之一:

  

BLOB最多64KB

     

MEDIUMBLOB高达16MB

     

LONGBLOB高达4GB

2。。要将上传的图像存储在数据库中,您可以执行以下操作:

Route::post('user/{id}', function (Request $request, $id) {
    // Get the file from the request
    $file = $request->file('image');

    // Get the contents of the file
    $contents = $file->openFile()->fread($file->getSize());

    // Store the contents to the database
    $user = App\User::find($id);
    $user->avatar = $contents;
    $user->save();
});

3。。要获取和输出化身,您可以执行以下操作:

Route::get('user/{id}/avatar', function ($id) {
    // Find the user
    $user = App\User::find(1);

    // Return the image in the response with the correct MIME type
    return response()->make($user->avatar, 200, array(
        'Content-Type' => (new finfo(FILEINFO_MIME))->buffer($user->avatar)
    ));
});

注意::请记住这一点,MySQL不是存储BLOB的合适解决方案。您可能需要使用Amazon S3之类的对象存储服务。

答案 2 :(得分:0)

使用此按钮上传图片

   /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
       // $this->validate($request,[//'movie_name'=>'required',
       //     // 'description'=>'required',
       //      //'video_url'=>'required',
       //      'image'=>'required|mimes:jpeg,jpg,png,gif|required|max:10000',
       //  ]);

   if ($request->hasFile('image') && $request->hasFile('image2')) {
     $file = $request->file('image');
     //$image=$file->getClientOriginalName();
     $image = time().'.'.$file->getClientOriginalExtension();
     $destinationPath ='assets/admin/uploads/image/';
     $file->move($destinationPath,$image);
     //echo  $destinationPath;exit();
        //echo  $image."<br/>";
    $file2 = $request->file('image2');
    $bg_images = time().'.'.$file2->getClientOriginalExtension();
    //$bg_images=$file2->getClientOriginalName();
    $destinationPath ='assets/admin/uploads/bg_images/';
    $file2->move($destinationPath,$bg_images);
     $insert_data=array('movie_name'=>$request->movie_name,
            'description'=>$request->description,
            'video_url'=>$request->video_url,
            'image'=>$image,
            'bg_images'=>$bg_images,
            'created_at'=>now(),
            'updated_at'=>now()
        );
        //print_r($insert_data);exit();
    }
    else
    {
        if ( $request->hasFile('image2')) {
         $file2 = $request->file('image2');
         $bg_images = time().'.'.$file2->getClientOriginalExtension();
        //$bg_images=$file2->getClientOriginalName();
         $destinationPath ='assets/admin/uploads/bg_images/';
         $file2->move($destinationPath,$bg_images);
         //echo  $destinationPath;exit();
            //echo $bg_images;
             $insert_data=array('movie_name'=>$request->movie_name,
                'description'=>$request->description,
                'video_url'=>$request->video_url,
                //'image'=>$image,
                'bg_images'=>$bg_images,
                'created_at'=>now(),
                'updated_at'=>now()
            );
        //print_r($insert_data);exit();
        }
        if ($request->hasFile('image') ) {
         $file = $request->file('image');
         //$image=$file->getClientOriginalName();
         $image = time().'.'.$file->getClientOriginalExtension();
         $destinationPath ='assets/admin/uploads/image/';
         $file->move($destinationPath,$image);
         //echo  $destinationPath;exit();
            //echo  $image."<br/>";
          $insert_data=array('movie_name'=>$request->movie_name,
                'description'=>$request->description,
                'video_url'=>$request->video_url,
                'image'=>$image,
                //'bg_images'=>$bg_images,
                'created_at'=>now(),
                'updated_at'=>now()
            );
           // print_r($insert_data);exit();
        }
        if ( ! $request->hasFile('image2') && ! $request->hasFile('image') ) {
           $insert_data=array('movie_name'=>$request->movie_name,
                    'description'=>$request->description,
                    'video_url'=>$request->video_url,
                    //'image'=>$image,
                   // 'bg_images'=>$bg_images,
                    'updated_at'=>now()
                    );
           // print_r($update_data);exit();
        }
    }    
    //exit();

    // echo $image;
    //exit();

    //print_r($insert_data);exit();
    $insert=DB::table('movies')->insert($insert_data);
    if ($insert) {
        return redirect()->route('admin.list_movies')->withSuccess('Record saved');
    }
    else {
        return redirect()->route('admin.list_movies')->withError('Record not saved');
    }
}