Загрузка фотографий и документов - один из самых распространенных вариантов использования в веб-разработке. Если вы только начали, вы узнаете, как создавать формы, отправлять сообщения и загружать файлы. Если вы знакомы с формой, Laravel сэкономит ваше время от повторения кода перемещения загруженного файла из временной папки в папку приложения.
Прежде всего, загрузите проект.
Создать новый проект
// Terminal
composer create-project --prefer-dist laravel/laravel photo-management
Давайте начнем.
Создать контроллер ресурсов
Laravel предоставляет удобную команду для создания контроллера CRUD.
// Terminal
php artisan make:controller PhotoController --resource
Controller created successfully.
Встроенная страница приветствия здесь бессмысленна. Удалите маршрут по умолчанию и зарегистрируйте ресурсоемкий маршрут к контроллеру.
// routes/web.php
Route::resource('/', 'PhotoController’);
Затем создайте пользовательский интерфейс.
Создание пользовательского интерфейса
Вы создаете файл макета, который используется во всем приложении.
// resources/views/layouts/app.blade.php
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Photo Management</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css"; integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<!-- Styles -->
<style>
body {
height: 100vh;
}
</style>
</head>
<body>
<div class="d-flex justify-content-center align-items-center" style="height: 100%">
@yield('content')
</div>
</body>
</html>
Создайте блейд-файл, расширяющий файл макета. В блейд-файл вы добавляете форму с вводом файла и кнопкой отправки.
// resources/views/index.blade.php
@extends('layouts.app')
@section('content')
<form>
{{ csrf_field() }}
<div class="form-group">
<label class="custom-file">
<input type="file" name="photo" class="custom-file-input">
<span class="custom-file-control"></span>
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
@endsection
Создайте блейд-файл для отображения сообщения об успешном выполнении.
// resources/views/success.blade.php
@extends('layouts.app')
@section('content')
<h2>Upload succeed!</h2>
@endsection
Затем настройте форму загрузки.
Настроить форму загрузки
В нормальной форме при отправке формы на сервер передается строковое значение. Фотография не является строковым значением. С помощью атрибута enctype вы можете кодировать фотографию при отправке на сервер.
// resources/views/index.blade.php
<form method="POST" action="/" enctype="multipart/form-data”>
…
</form>
После отправки формы вы получите загруженную фотографию.
Получить загруженное фото
Вы можете получить доступ к загруженной фотографии с помощью метода file в Illuminate \ Http \ Request.
// app/Http/Controllers/PhotoController.php
public function store(Request $request)
{
$path = $request->file('photo')->store('images');
return view('success');
}
Получите загруженный файл и сохраните его в папке с именем images в папке для хранения.
По умолчанию метод store генерирует уникальный идентификатор, который будет служить именем файла. Не волнуйся. Вы всегда можете сохранить файл с желаемым именем.
Магазин с произвольным именем файла
Используйте метод storeAs, он принимает второй аргумент в качестве настраиваемого имени файла. Вы объединяете имя файла с расширением. В противном случае фотография будет сохранена без расширения.
// app/Http/Controllers/PhotoController.php
public function store(Request $request)
{
$extension = $request->file('photo')->extension();
$path = $request->file('photo')->storeAs('images', 'my_photo.' . $extension);
return view('success');
}
Что дальше
В следующем руководстве будет рассказано о проверке загружаемого файла.
Если вы еще не подписались на мой список рассылки на домашней странице, сделайте это сейчас. Я сообщу вам, когда будет опубликовано новое руководство.
Я говорил вам, что вы получите серию БЕСПЛАТНЫХ уроков при подписке? Пойдите, проверьте это.
Будьте на связи.
Первоначально опубликовано в Я учу вас кодировать.