Как загрузить изображение с помощью Laravel? - PullRequest
0 голосов
/ 03 января 2019

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

что я пробовал:
Я искал другие вопросы о переполнении стека, но они не помогли.

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

Ответы [ 3 ]

0 голосов
/ 03 января 2019

На самом деле с Laravel это всего лишь несколько строк кода. Допустим, у вас есть пользователь, у которого есть аватар, который хранится в базе данных. Вот как вы можете хранить и извлекать аватар из базы данных:

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

BLOB до 64 КБ

СРЕДНИЙ БЛОБ до 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)
    ));
});

ПРИМЕЧАНИЕ: Пожалуйста, имейте это в виду, MySQL не является подходящим решением для хранения BLOB. Возможно, вам потребуется использовать службу хранения объектов, например Amazon S3.

0 голосов
/ 01 июля 2019

Используйте это, чтобы загрузить изображение

   /**
     * 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');
    }
}
0 голосов
/ 03 января 2019

Сначала вам нужна форма для просмотра (не забудьте токен 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');

Затем на вашем контроллере создайте функцию, которая будет проверять и перемещать ваше изображение в папку «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

...