Класс UploadedFile
Класс UploadedFile является расширением PHP-класса SplFileInfo и представляет файл, загруженный через HTTP-запрос. Он предоставляет удобные методы для получения информации о файле, проверки его валидности и сохранения в файловую систему. Объект этого класса автоматически создаётся для каждого загруженного файла, переданного в запросе.
Получение загруженного файла
Чтобы получить загруженный файл в контроллере, нужно обратиться к объекту запроса через метод file или через динамическое свойство:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class FileController extends Controller
{
public function upload(Request $request)
{
// Способ 1: через метод file
$file = $request->file('document');
// Способ 2: через динамическое свойство
$file = $request->document;
// Проверка наличия файла
if ($request->hasFile('document')) {
// Файл существует
}
}
}
?>
Синтаксис
<?php
use IlluminateHttpUploadedFile;
// Метод для сохранения файла
$path = $file->store($path, $disk);
$path = $file->storeAs($path, $name, $disk);
$path = $file->storePublicly($path, $disk);
// Методы для получения информации
$name = $file->getClientOriginalName();
$ext = $file->getClientOriginalExtension();
$mime = $file->getMimeType();
$size = $file->getSize();
$hash = $file->hashName();
$valid = $file->isValid();
?>
Пример
Давайте сохраним загруженный файл в локальное хранилище:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class FileController extends Controller
{
public function upload(Request $request)
{
if ($request->hasFile('document')) {
$file = $request->file('document');
if ($file->isValid()) {
// Сохраняем файл
$path = $file->store('documents', 'public');
return "File saved to: " . $path;
}
}
return "No file uploaded";
}
}
?>
Результат выполнения кода:
"File saved to: documents/abc123def456.jpg"
Пример
Сохраним файл с пользовательским именем, указав расширение:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class FileController extends Controller
{
public function upload(Request $request)
{
if ($request->hasFile('document')) {
$file = $request->file('document');
$path = $file->storeAs(
'avatars',
'user_avatar.' . $file->getClientOriginalExtension(),
'public'
);
return "File saved as: " . $path;
}
return "No file uploaded";
}
}
?>
Результат выполнения кода:
"File saved as: avatars/user_avatar.jpg"
Пример
Получим информацию о загруженном файле:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class FileController extends Controller
{
public function info(Request $request)
{
if ($request->hasFile('document')) {
$file = $request->file('document');
$name = $file->getClientOriginalName();
$ext = $file->getClientOriginalExtension();
$mime = $file->getMimeType();
$size = $file->getSize();
$hash = $file->hashName();
echo "Original name: " . $name . "\n";
echo "Extension: " . $ext . "\n";
echo "MIME type: " . $mime . "\n";
echo "Size (bytes): " . $size . "\n";
echo "Generated hash: " . $hash . "\n";
}
}
}
?>
Результат выполнения кода:
"Original name: photo_2026.jpg"
"Extension: jpg"
"MIME type: image/jpeg"
"Size (bytes): 245678"
"Generated hash: 9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c.jpg"
Смотрите также
-
метод
store,
который сохраняет файл в хранилище -
метод
storeAs,
который сохраняет файл с указанным именем -
метод
getClientOriginalName,
который возвращает оригинальное имя файла -
метод
isValid,
который проверяет валидность загруженного файла