РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
674 of 1361 menu

Метод guessExtension

Метод guessExtension класса UploadedFile возвращает расширение файла, определённое на основе его MIME-типа. В отличие от метода getClientOriginalExtension, который возвращает расширение, указанное клиентом, метод guessExtension анализирует реальное содержимое файла и подбирает соответствующее расширение из таблицы соответствия MIME-типов. Если определить расширение не удаётся, метод возвращает null.

Синтаксис

public function guessExtension(): ?string

Пример

Давайте получим расширение загруженного файла в контроллере:

<?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_file')] public function upload(Request $request): Response { $file = $request->files->get('file'); if ($file === null) { return new Response('no file'); } $ext = $file->guessExtension(); return new Response($ext ?? 'unknown'); } } ?>

Результат выполнения кода для загруженного PNG-изображения:

"png"

Пример

Давайте сравним результат работы методов guessExtension и getClientOriginalExtension:

<?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('/compare', name: 'compare_ext')] public function compare(Request $request): Response { $file = $request->files->get('file'); if ($file === null) { return new Response('no file'); } $guessed = $file->guessExtension(); $original = $file->getClientOriginalExtension(); return new Response($guessed . ' / ' . $original); } } ?>

Результат выполнения кода, когда клиент загрузил JPEG-файл с именем 'image.txt':

"jpeg / txt"

Как видно из результата, метод guessExtension определил настоящее расширение 'jpeg', а метод getClientOriginalExtension вернул расширение, указанное клиентом - 'txt'.

Пример

Давайте используем метод guessExtension для формирования безопасного имени файла при сохранении на сервере:

<?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('/save', name: 'save_file')] public function save(Request $request): Response { $file = $request->files->get('file'); if ($file === null) { return new Response('no file'); } $ext = $file->guessExtension() ?? 'bin'; $name = 'upload_' . uniqid() . '.' . $ext; $file->move( $this->getParameter('kernel.project_dir') . '/public/uploads', $name ); return new Response($name); } } ?>

Результат выполнения кода для загруженного PDF-файла:

"upload_6512f8a1b2c3d.pdf"

Смотрите также

  • класс UploadedFile,
    который представляет загруженный файл
  • метод getClientOriginalExtension,
    который возвращает расширение, указанное клиентом
  • метод getClientOriginalName,
    который возвращает оригинальное имя файла
  • метод move,
    который перемещает загруженный файл
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить