Я должен хранить и извлекать изображение из базы данных. Я хочу сохранить изображение вместо пути изображения или имени изображения. Когда я его искал, я нашел решения для хранения пути или имени изображения. Так может ли кто-нибудь сказать мне, как хранить и извлекать изображение с его размером в КБ из базы данных?
Это мой маршрут.
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}