如何从PSR-7 UploadedFileInterface检测MIME类型

时间:2019-06-19 16:22:28

标签: php file-upload mime-types psr-7

我有一个处理图像上传的简单控制器。在将图像/文件保存到最终目的地之前,我想验证该文件的mimeType。

我的控制器使用Psr\Http\Message\ServerRequestInterface并调用getUploadedFiles()来获取上传的文件作为Psr\Http\Message\UploadedFileInterface的实例。

在该接口的实例上,我现在可以调用getClientMediaType()以获得mime类型。

我的问题是文档明确声明不信任该值! 因此,我想使用mime_content_type()检测mimeType,但无法从该接口获取实际的文件名。

我看到两个选择:

  • 我可以只使用$ _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
    }

在从UploadedFileInterface获取tmp_name上是否没有方法?是否有另一种最佳实践来进行这种验证?这似乎是一个非常明显的问题,所以我想我缺少一些基本的东西。

0 个答案:

没有答案