Класс UploadedFile
Класс UploadedFile используется в Symfony для представления файла,
загруженного пользователем через HTML-форму. Объект этого класса
автоматически создаётся при обработке запроса, если в форме есть
поле с типом file. Через методы класса можно получить
оригинальное имя файла, его MIME-тип, расширение, размер, а также
переместить файл в нужную директорию на сервере.
Класс наследуется от File и расширяет его методами,
специфичными для загруженных файлов. Экземпляр UploadedFile
можно получить в контроллере через объект Request методом
files.
Синтаксис
use Symfony\Component\HttpFoundation\File\UploadedFile;
$file = new UploadedFile(
string $path,
string $originalName,
?string $mimeType = null,
?int $error = null,
bool $test = false
);
Пример
Давайте создадим форму для загрузки файла и получим объект
UploadedFile в контроллере:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/upload', name: 'upload')]
public function upload(Request $request): Response
{
$file = $request->files->get('document');
if ($file === null) {
return new Response('no file');
}
return new Response($file->getClientOriginalName());
}
}
?>
Пример
Давайте переместим загруженный файл в директорию uploads
с помощью метода move:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/upload', name: 'upload')]
public function upload(Request $request): Response
{
$file = $request->files->get('document');
if ($file === null) {
return new Response('no file');
}
$file->move(
$this->getParameter('kernel.project_dir') . '/uploads',
'renamed.txt'
);
return new Response('moved');
}
}
?>
Результат выполнения кода:
moved
Пример
Давайте получим основные характеристики загруженного файла:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/info', name: 'upload_info')]
public function info(Request $request): Response
{
$file = $request->files->get('document');
if ($file === null) {
return new Response('no file');
}
$res = [
$file->getClientOriginalName(),
$file->getClientOriginalExtension(),
$file->getClientMimeType(),
$file->getSize(),
];
return new Response(implode(' | ', $res));
}
}
?>
Результат выполнения кода:
"article.txt | txt | text/plain | 1024"
Пример
Давайте проверим, был ли файл загружен без ошибок,
с помощью метода isValid:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/check', name: 'upload_check')]
public function check(Request $request): Response
{
$file = $request->files->get('document');
if ($file === null) {
return new Response('no file');
}
if (!$file->isValid()) {
return new Response($file->getErrorMessage());
}
return new Response('valid');
}
}
?>
Результат выполнения кода:
valid
Смотрите также
-
класс
File,
базовый класс для работы с файлами -
метод
getClientOriginalName,
который возвращает оригинальное имя загруженного файла -
метод
move,
который перемещает загруженный файл в нужную директорию -
метод
isValid,
который проверяет, был ли файл загружен без ошибок