Загрузка изображений является основным требованием для всех проектов, поэтому я приведу простой пример загрузки изображений с помощью Laravel 6. Мы используем загрузку изображений в Laravel 6 с использованием фасада Request
. Мы будем загружать изображения с проверкой по типу изображения, mime-type, размера файла и т. д., таким образом можно защитить форму и маршруты от загрузки исполняемых скриптов на сервер.
В этом примере мы создадим два маршрута, один для метода GET, а другой для метода POST. Мы создадим простую форму для загрузки файла. Таким образом, вам нужно просто выбрать изображение, а затем оно будет загружено в каталог /public/images
.
Шаг 1: Установка Laravel 6
Прежде всего, нам нужно получить новое приложение Laravel 6, используя команду ниже. В этом примере мы устанавливаем приложение с нуля. Откройте командную строку терминала и/или выполните команду ниже:
composer create-project --prefer-dist laravel/laravel blog
Шаг 2. Создание маршрутов
На следующем шаге мы добавим два новых маршрута в файл web.php
. Один маршрут для создания формы и другой для метода POST. Итак, давайте просто создадим оба маршрута, как показано ниже:
routes/web.php
Route::get('image-upload', 'ImageUploadController@imageUpload')->name('image.upload');
Route::post('image-upload', 'ImageUploadController@imageUploadPost')->name('image.upload.post');
На третьем шаге нам нужно будет создать новый ImageUploadController
, и здесь мы должны добавить два метода imageUpload()
и imageUploadPost()
. Таким образом, один метод будет обрабатывать метод GET, другой — POST. Давайте добавим код.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ImageUploadController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function imageUpload()
{
return view('imageUpload');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function imageUploadPost(Request $request)
{
$request->validate([
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$imageName = time().'.'.$request->image->extension();
$request->image->move(public_path('images'), $imageName);
return back()
->with('success','You have successfully upload image.')
->with('image',$imageName);
}
}
Шаг 3: Создаем шаблон Blade
На последнем шаге нам нужно создать файл imageUpload.blade.php
, и в этом файле мы создадим форму с кнопкой для загрузки файла. Скопируйте ниже и поместите в этот файл.
<!DOCTYPE html>
<html>
<head>
<title>laravel 6 image upload example — ItSolutionStuff.com.com</title>
<link rel="stylesheet" href="getbootstrap.com/dist/css/bootstrap.css">
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<h2>laravel 6 image upload example — ItSolutionStuff.com.com</h2>
</div>
<div class="panel-body">
@if ($message = Session::get('success'))
<div class="alert alert-success alert-block">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>{{ $message }}</strong>
</div>
<img src="images/{{ Session::get('image') }}">
@endif
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('image.upload.post') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="col-md-6">
<input type="file" name="image" class="form-control">
</div>
<div class="col-md-6">
<button type="submit" class="btn btn-success">Upload</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Шаг 4: Создайте каталог images
На последнем шаге нам нужно создать новый каталог images
с разрешениями на запись, поэтому давайте создадим новую папку в папке /public
.
После этого вы можете попробовать загрузить изображение.
Я надеюсь, что это помогло вам…