Как сохранить и получить содержимое изображения из базы данных с помощью Laravel

Я должен хранить и извлекать изображение из базы данных. Я хочу сохранить изображение вместо пути изображения или имени изображения. Когда я его искал, я нашел решения для хранения пути или имени изображения. Так может ли кто-нибудь сказать мне, как хранить и извлекать изображение с его размером в КБ из базы данных?

Это мой маршрут.

Route::get('big_image/{id}/image', function ($id) { $user = big_image::find($id); return response()->make($user->image, 200, array( 'Content-Type' => (new finfo(FILEINFO_MIME))->buffer($user->image) )); 

});

Это мой контроллер

  public function new_store(Request $request ,$id){ $event_id = $id; $img = new big_image; $file = $request->file('image'); $contents = $file->openFile()->fread($file->getSize()); $img = big_image::find($id); $img->image = $contents; $img->image_name = $request->image_name; $img->event_id = $event_id; $img->save(); $images=DB::table('big_image')->where('event_id','=',$event_id)->get(); return view('image_upload',compact('images','id','response')); } 

Мой файл display.blade.php

 @extends('app') @section('content') <h2 style="text-align: center;margin-top: 10px;">Image Gallery</h2> <a href="{{url('pic_upload/'.$id.'')}}" class="col-sm-12" style="padding-left: 0;"><span> add more pictures</span></a><br> <a href="{{url('events')}}"><span>Back to events</span></a><br> @foreach($images as $item) <div class="col-sm-4"> {{--<img src="data:image/jpeg;base64,'.base64_encode( $item->image ).'"/>;--}} </div> @endforeach @stop 

Фактически с Laravel он включает только несколько строк кода. Допустим, у вас есть пользователь, у которого есть аватар, который хранится в базе данных. Предполагая, что вы используете MySQL, вот как вы можете хранить и извлекать аватар из базы данных:

1. Сначала вам понадобится столбец avatar в таблице users который может хранить двоичные данные. В зависимости от того, насколько большой вы хотите разрешить изображение аватара, тип данных столбца может быть одним из следующих:

BLOB до 64 КБ

MEDIUMBLOB до 16 МБ

LONGBLOB до 4 ГБ

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) )); }); 

Поэтому для доступа к аватару пользователя с id равным 10 вы можете просто использовать этот URL:

 http://domain.com/user/10/avatar 

Вы можете хранить файлы в базе данных в полях blob.

Возможно, эта ссылка помогает вам

Затем вы можете создать URL-адрес своего изображения:

 Route::get('/images/{image}', function($image) { header("Content-type: image/jpeg"); //"select image from table where id = $image" echo $here_I_get_my_img_from_DB; }); 

и получить img из url: /image/{img_id}