Как определить MIME-тип из PSR-7 UploadedFileInterface - PullRequest
1 голос
/ 19 июня 2019

У меня есть простой контроллер, который обрабатывает загрузку изображений. Перед сохранением изображения / файла в его окончательном месте я хотел бы проверить mimeType этого файла.

Мой контроллер использует Psr\Http\Message\ServerRequestInterface и вызывает getUploadedFiles(), чтобы получить загруженные файлы как экземпляры Psr\Http\Message\UploadedFileInterface.

На экземпляре этого интерфейса теперь я могу вызвать getClientMediaType(), чтобы получить тип mime.

Моя проблема в том, что в документации прямо сказано, что нельзя доверять этому значению! Из-за этого я хотел бы обнаружить mimeType с помощью mime_content_type(), но я не могу получить фактическое имя файла из этого интерфейса.

Я вижу два варианта:

  • я мог бы просто использовать $ _FILES и вызвать mime_content_type ($ _ FILES ['files'] ['tmp_name'])
  • я мог бы переместить файл в место, которое я знаю, а затем вызвать mime_content_type (), но это помешало бы НЕ перемещать файл перед проверкой

Вот сокращенная версия моего контроллера:

    public function handleUpload(ServerRequestInterface $request, ResponseInterface $response) {
        $files = $request->getUploadedFiles();
        /** @var UploadedFile $uploadedFile */
        $uploadedFile = $files[0];

        $fileType = $uploadedFile->getClientMediaType(); // This need to be replaced !
        if (!in_array($fileType, self::VALID_IMAGE_MIME_TYPE)) {
            // return error
        }

        // do stuff
    }

Есть ли метод, который я не вижу, как получить tmp_name из UploadedFileInterface? Есть ли еще одна лучшая практика для такого рода проверки? Кажется, это очень очевидная проблема, поэтому я думаю, что мне не хватает чего-то простого.

...